artemgapchenko
@artemgapchenko

Параллельное выполнение потоков в PySide?

Всем привет.

Для курсовой работы пишу приложение, которое, грубо говоря, должно высчитывать каждое следующее состояние клеточного автомата и время от времени выводить его на экран. Решил расчеты распараллелить — создал свой класс MyThread, унаследовал его от QRunnable. Создал массив из двух объектов класса MyThread и время от времени запускаю их на выполнение таким вот образом:

for w in self.__workers:
    QtCore.QThreadPool.globalInstance().start(w)
QtCore.QThreadPool.globalInstance().waitForDone()


Посмотрел в диспетчер задач, и увидел, что как было одно ядро занято задачей, так оно одним и осталось. Подумал, что это может быть связано с количеством потоков в пуле, решил увеличить их число до трех (один поток — главный, два других — MyThread'ы).

QtCore.QThreadPool.globalInstance().setMaxThreadCount(3)


Никаких перемен.

Я где-то что-то не так делаю, но понять что и где не могу. Может быть кто-нибудь сталкивался с задачей написания приложения на PySide, которое должно было работать хотя бы на двух ядрах? Есть идеи, что я делаю неправильно?
  • Вопрос задан
  • 2996 просмотров
Решения вопроса 1
mik_os
@mik_os
Python использует GIL (link). Простыми словами: в любой момент времени исполняется только 1 кусок python-кода. Для загрузки все ядер используйте multiprocessing.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Фаст Софт Санкт-Петербург
от 150 000 до 180 000 ₽
от 250 000 ₽
Sibdev Красноярск
от 120 000 до 180 000 ₽
28 мар. 2023, в 17:42
70000 руб./за проект
28 мар. 2023, в 17:40
10000 руб./за проект
28 мар. 2023, в 17:18
500 руб./за проект