嘗試python多處理的Windows上的RuntimeError

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

我正在嘗試在 Windows 機器上使用線程和多處理的第一個正式 Python 程序。我無法啟動這些進程,python 給出了以下消息。問題是,我沒有在 main 模塊中啟動我的線程。線程在類內的單獨模塊中處理。

編輯:順便說一下,這段代碼在 ubuntu 上運行良好。在 Windows 上不完全

RuntimeError: 在當前進程完成其引導階段之前嘗試啟動一個新進程。這可能意味著您在 Windows 上並且忘記在主模塊中使用正確的習慣用法: if __name__ == "__main__": freeze_support() ... 如果程序是,則可以省略“freeze_support()”行不會被凍結以生成 Windows 可執行文件。 

我的原始代碼很長,但我能夠在代碼的刪減版本中重現錯誤。它分為兩個文件,第一個是主模塊,除了導入處理進程/線程和調用方法的模塊外,它幾乎沒有做任何事情。第二個模塊是代碼的核心所在。


testMain.py:

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

parallelTestModule.py:

import multiprocessing from multiprocessing import Process import threading class ThreadRunner(threading.Thread): """ 這個類代表一個正在運行的線程的單個實例""" def __init__(self, name): threading.Thread.__init__(self) self.name = name def run(self): print self.name," " class ProcessRunner: """ 這個類代表一個正在運行的進程的單個實例 """ def runp(self, pid, numThreads): mythreads = [] for tid in range(numThreads): name = "Proc-"+str(pid)+"-Thread-"+str(tid) th = ThreadRunner(name) mythreads.append(th) for i in mythreads: i.start()對於 mythreads 中的 i:i.join() 類 ParallelExtractor:def runInParallel(self, numProcesses, numThreads): myprocs = [] prunner = ProcessRunner() for pid in range(numProcesses): pr = Process(target=prunner.runp, args=(pid, numThreads)) myprocs.append(pr) # if __name__ == "parallelTestModule": #這不起作用 # if __name__ == "__main__": #這顯然不起作用 # multiprocessing.freeze_support() #在看到錯誤後添加對 myprocs 中的 i 無用:i.start() for i in myprocs: i.join ()