У меня есть графический интерфейс и, щелкнув по кнопке, я должен начать большой расчет.Miltiprocessing vs multithreading
Я использую QtDesigner с питоном 2,7
В начале, у меня была проблема, что мой GUI стал отвечать на запросы в то время как большой расчет работал.
Я решил это с помощью модуля Threading:
class myMainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
#rest of the code here
class heavyCalculations(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
#rest of the code here
Мои сомнения сейчас: Давайте предположим, что я хочу, чтобы начать 4 сложных вычислений, и я хочу, чтобы использовать все 4 ядра моего компьютера работает на время. Для этого мне понадобится многопроцессорная обработка, но что мне делать, чтобы мой графический интерфейс не реагировал, но в то же время вовремя использовать 4 ядра?
Насколько я знаю, если я начинаю новый процесс для каждого тяжелого расчета, он работает параллельно, но мой графический интерфейс становится невосприимчивым.
И если я запускаю 4 потока, он также работает, и графический интерфейс не затрагивается, но это не настоящая параллель.
Любая помощь?
Почему, по-вашему, потоки не параллельны? – Zaffy
Нити не параллельны, процессор очень быстро перескакивает из одного в другой, делая вид, что он «параллелен», но он не параллелен, если мы вызываем параллель, когда 4 процесса работают на 4 ядра по времени. Это не то же самое. – codeKiller
Я могу получить все ядра до 100% при многопоточности, поэтому я бы сказал, что один процесс! = Одно ядро – Zaffy