Найти - Пользователи
Полная версия: многопоточность
Начало » Python для новичков » многопоточность
1
ListikLa
Здраствуйте! у меня такая проблема существует написанное мной приложение на Qt, оно собранно в dll библиотеку. так же есть приложение написанное на Pythone. так вот из питона я вызываю своё приложение как функцию через создание отдельной нити. моё приложение запускается но вот главная проблема, что она не даёт жизни питоновской программе. может кто сталкивался с такой проблемой или хотя бы может что нибудь посоветовать?
Да и самое интересное, что поставил в коде, после создания нити для моего приложения, вывод текста и питон его вывел, а вот обрабатывать главное приложение ни хочет.
Андрей Светлов
После точки обычно следует заглавный регистр.
Диагноз не ясен, по звездам гадать нелегко.
И, тем не менее, складывается впечатление что вы при “вызове своего приложения как функции” не потрудились отпустить GIL.
ListikLa
На счет звёзд вы конечно несомненно правы! Посмотрел в интернете про GIL, но так как на pythone я ни пишу, потому это мне мало, что дало. Поэтому, прошу вас (уверен все так просят) объяснить на пальцах. А под “не потрудились отпустить GIL” вы бы не могли дать конкретные указания, как это сделать. Заранее, спасибо
Андрей Светлов
http://docs.python.org/extending/extending.html#thin-ice
Обратите внимание на
Py_BEGIN_ALLOW_THREADS
Py_END_ALLOW_THREADS
Вызовите свой Qt код внутри этих макросов.
Вы вообще как с Qt работаете? Через Python C API или я неправильно догадался?

Если нужно — могу объяснить подробней. Не ранее чем завтра.
ListikLa
Я пишу таким образом
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 экземплярах, а если и может то этого я пока не знаю.
Прошу, прокомментируйте мои соображения. Заранее благодарен.
Андрей Светлов
Конечно, QApplication может быть только один. И, конечно, его можно заводить только из главного потока.
Я предполагал, что вы знаете C++ Qt но не владеете Питоном. Оказывается, все куда хуже.
ListikLa
Ну хуже или не хуже это философский вопрос!) Спасибо вам за дискуссию по этому вопросу!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB