Уведомления

Группа в Telegram: @pythonsu

#1 Май 8, 2011 18:01:41

ListikLa
От:
Зарегистрирован: 2011-05-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

многопоточность

Здраствуйте! у меня такая проблема существует написанное мной приложение на Qt, оно собранно в dll библиотеку. так же есть приложение написанное на Pythone. так вот из питона я вызываю своё приложение как функцию через создание отдельной нити. моё приложение запускается но вот главная проблема, что она не даёт жизни питоновской программе. может кто сталкивался с такой проблемой или хотя бы может что нибудь посоветовать?
Да и самое интересное, что поставил в коде, после создания нити для моего приложения, вывод текста и питон его вывел, а вот обрабатывать главное приложение ни хочет.



Офлайн

#2 Май 8, 2011 21:08:25

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

многопоточность

После точки обычно следует заглавный регистр.
Диагноз не ясен, по звездам гадать нелегко.
И, тем не менее, складывается впечатление что вы при “вызове своего приложения как функции” не потрудились отпустить GIL.



Офлайн

#3 Май 10, 2011 21:05:11

ListikLa
От:
Зарегистрирован: 2011-05-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

многопоточность

На счет звёзд вы конечно несомненно правы! Посмотрел в интернете про GIL, но так как на pythone я ни пишу, потому это мне мало, что дало. Поэтому, прошу вас (уверен все так просят) объяснить на пальцах. А под “не потрудились отпустить GIL” вы бы не могли дать конкретные указания, как это сделать. Заранее, спасибо



Офлайн

#4 Май 10, 2011 23:35:37

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

многопоточность

http://docs.python.org/extending/extending.html#thin-ice
Обратите внимание на
Py_BEGIN_ALLOW_THREADS
Py_END_ALLOW_THREADS
Вызовите свой Qt код внутри этих макросов.
Вы вообще как с Qt работаете? Через Python C API или я неправильно догадался?

Если нужно — могу объяснить подробней. Не ранее чем завтра.



Офлайн

#5 Май 11, 2011 18:57:54

ListikLa
От:
Зарегистрирован: 2011-05-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

многопоточность

Я пишу таким образом
Thread.start_new_thread (functionname, ())
functionname - это имя функции которую я написал на Qt и собрал в dll библиотеку.
Так вот сегодня я попробывал следующее:

Thread.start_new_thread (functionname, ())
print "1 potok"
Thread.start_new_thread (functionname, ())
print "2 potok"
Thread.start_new_thread (functionname, ())
print "2 potok"
Программа моя запустилась, в консоль написалось все три надписи, две остальный пока программы не запускаются, при закрытии первой программы запускается вторая, при закрытии второй запускается третья, при этом консоль выдает следующее сообщение QApplication was not created in the main() thread!
Всё выше сказанное к вопросу о звёздах. Теперь мне кажется что проблема не в питоне, а наверно в Qt.
Я думаю, что вы работали с Qt, ну и конечно знаете что такое QApplication. Cкорее всего этот QApplication не может существовать в N экземплярах, а если и может то этого я пока не знаю.
Прошу, прокомментируйте мои соображения. Заранее благодарен.



Офлайн

#6 Май 12, 2011 14:04:05

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

многопоточность

Конечно, QApplication может быть только один. И, конечно, его можно заводить только из главного потока.
Я предполагал, что вы знаете C++ Qt но не владеете Питоном. Оказывается, все куда хуже.



Офлайн

#7 Май 13, 2011 04:46:21

ListikLa
От:
Зарегистрирован: 2011-05-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

многопоточность

Ну хуже или не хуже это философский вопрос!) Спасибо вам за дискуссию по этому вопросу!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version