RuntimeError в Windows при попытке многопроцессорной обработки Python

| | | | | | | | | | | | | | | | | | | |

Я пробую свою самую первую формальную программу на Python, использующую многопоточность и многопроцессорность на компьютере с Windows. Однако я не могу запустить процессы, а python выдает следующее сообщение. Дело в том, что я не запускаю свои потоки в модуле main. Потоки обрабатываются в отдельном модуле внутри класса.

EDIT: Кстати, этот код отлично работает в Ubuntu. Не совсем в Windows

RuntimeError: попытка запустить новый процесс до того, как текущий процесс завершит фазу начальной загрузки. Вероятно, это означает, что вы работаете в Windows и забыли использовать правильную идиому в основном модуле: не будет заморожен для создания исполняемого файла Windows. 

Мой исходный код довольно длинный, но я смог воспроизвести ошибку в сокращенной версии кода. Он разделен на два файла, первый является основным модулем и делает очень мало, кроме импорта модуля, который обрабатывает процессы/потоки и вызывает метод. Второй модуль — это основная часть кода.


testMain.py:

import parallelTestModule Extractor = parallelTestModule.ParallelExtractor () Extractor.runInParallel(numProcesses=2, numThreads=4) 

parallelTestModule.py:

import multiprocessing from multiprocessing import Класс потоков импорта процесса ThreadRunner(threading.Thread): """ Этот класс представляет один экземпляр работающего потока""" def __init__(self, name): threading.Thread.__init__(self) self.name = name def run(self): print self.name," " class ProcessRunner: """ Этот класс представляет отдельный экземпляр работающего процесса in range(numThreads): name = "Proc-"+str(pid)+"-Thread-"+str(tid) th = ThreadRunner(name) myreads.append(th) для i в мифридах: i.start() для i в мифах: класс i.join() ParallelExtractor: def runInParallel(self, numProcesses, numThreads): myprocs = [] prunner = ProcessRunner() для pid в диапазоне (numProcesses): pr = Process(target=prunner.runp, args=(pid, numThreads)) myprocs.append(pr) # if __name__ == "parallelTestModule": #Это не сработало # if __name__ == "__main__": #Это, очевидно, не работает # multiprocessing.freeze_support() #добавлено после того, как увидел ошибку, которая не помогает для i в myprocs: i.start() для i в myprocs: i.join ()