Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2017 06:40:39

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

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

py.user.next
«Класс QThread создан и предназначен для использования в качестве интерфейса к потокам операционной системы, но не для того, чтобы помещать в него код, предназначенный для выполнения в отдельном потоке. В ООП мы наследуем класс для того чтобы расширить или углубить функциональность базового класса. Единственное оправдание для наследования QThread, которое я могу представить, это добавление такой функциональности, которой в QThread не существует, например, передача указателя на область памяти, которую поток может использовать для своего стека, или, возможно, добавление поддержки интерфейсов реального времени. Загрузка файлов, работа с базами данных, и подобные функции не должны присутствовать в наследуемых классах QThread; они должны реализовываться в других объектах»

Иными словами - популярный способ использования QThread = извращение.

https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/

Отредактировано Rudium (Май 29, 2017 06:46:52)

Офлайн

#2 Май 29, 2017 07:29:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

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

http://doc.qt.io/qt-4.8/qthread.html

You can use worker objects by moving them to the thread using QObject::moveToThread().

Another way to make code run in a separate thread, is to subclass QThread and reimplement run().

Оба варианта работают, судя по всему. Просто проверь: запусти два процесса в текущем потоке и в унаследованном. Выполнятся они одновременно?



Офлайн

#3 Май 29, 2017 07:31:28

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

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

py.user.next
http://doc.qt.io/qt-4.8/qthread.html
Оба работают, и один является извращением.

Офлайн

#4 Май 29, 2017 08:40:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

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

Rudium
Оба работают, и один является извращением.
Там не всё так просто.
wiki.qt.io. QThread
Раньше это был абстрактный класс и там было необходимо реализовывать метод run() в производном классе, иначе в этом методе ничего не было. Раньше - это не во времена динозавров, а совсем недавно. Потом стали разделять, но всё равно наследование остаётся, когда нужно добавить собственные сигналы в класс.
Так что это вполне нормально. Но когда добавляешь сигналы, там ещё есть какая-то муть с доступом к этим сигналам, поэтому половину этого и половину того - тоже не факт, что можно делать.

Так что если ты попадёшь на Qt 4.3, например, то твой новомодный метод не сработает, и ты будешь думать “а чо он не работает? там же вот написано”. А не работает, потому что там он является виртуальным методом. А ты можешь гарантировать, что твой код запустят на версии Qt 4.4 и выше? Пока что версия Qt 4.x вся живая. Хоть пятая версия и вышла, но это не факт, что ею все сразу стали пользоваться (для неё нужна новая система с новыми динамическими библиотеками).

У меня, например, тоже винда не десятая сейчас стоит, хоть она и вышла давно, и даже не восьмая, а седьмая. А почему? А мне не нужна новая винда, у меня всё работает на старой, время на переустановку всех программ и прочего я тратить не хочу, а новую винду ещё надо покупать (мы же помним, что это ещё и не бесплатное).

Ты думаешь “а вот я им скажу, чтобы они поставили новую Qt и они поставят”, а я тебе скажу, как будет: они посмотрят, твоя программа не ставится и требует обновления Qt, которое требует обновления системы, которое требует сидеть в Интернете несколько часов. Они просто выкинут твою программу. Нет программы - нет проблем.



Отредактировано py.user.next (Май 29, 2017 09:09:28)

Офлайн

#5 Май 29, 2017 08:44:02

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

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

Топикстартер указывал в вопросе что изучает PyQt5. PyQt4 = оффтоп

Офлайн

#6 Май 29, 2017 09:00:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

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

Rudium
Топикстартер указывал в вопросе что изучает PyQt5. PyQt4 = оффтоп

А вот он пишет, что нашёл статью под PyQt4 и не может ей воспользоваться
admiral
Нашел статью PyQt: простая работа с потоками, но там под PyQT4.

Если бы PyQt4 было мёртвым, был бы смысл ещё заморачиваться, но оно будет жить ещё лет пять и материалов по нему уже дофига, а по PyQt5 он не может ничего найти. Так на чём лучше учиться, на живом и документированном или на новом и недокументированном ещё?



Отредактировано py.user.next (Май 29, 2017 09:01:52)

Офлайн

#7 Май 29, 2017 09:11:02

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

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

py.user.next
Не могу найти новые носки, одену старые. На людях разуваться не буду. Зато они привычнее. Приняли форму ног и закоксовались.

Офлайн

#8 Май 29, 2017 09:18:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

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

Rudium
Не могу найти новые носки, одену старые.
У меня нет новых носок, я хожу в старых проверенных носках, стираных и без дырок.
А ты знаешь, что новое PyQt5 работает с глюками? Там же не просто добавляется функционал, а новые баги с ним приходят (недоделки и прочая хрень). Я несколько раз уже встречал, что на пятой версии глюки, а запускают то же самое на четвёртой - и всё нормально. Сейчас, наверное, её причесали уже, но как только она вышла, были баги, которых нет в четвёртой. Да можешь даже трекер найти их и посмотреть баги, свойственные только этой версии (ну, это в любой программе так).



Офлайн

#9 Май 31, 2017 14:11:50

Rudium
Зарегистрирован: 2015-12-06
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

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

Не пользуйся PyQt5. Оставь это мне. Я сообщу, когда она на 100% будет идеальна и можно будет на нее перейти.

Офлайн

#10 Май 31, 2017 22:35:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

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

Rudium
Я сообщу, когда она на 100% будет идеальна и можно будет на нее перейти.
Я пользуюсь обычной Qt, PyQt тормозит на сигналах сильно, когда их много становится.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version