新手无法让concurrent.futures正常工作
新手无法让concurrent.futures正常工作
我正在尝试在Windows机器上使用Threading和Multiprocessing编写我的第一个正式的Python程序。然而,我无法启动进程,Python给出了以下消息。问题是,我没有在main模块中启动线程。线程是在一个独立的模块内的一个类中处理的。
编辑:顺便说一下,这段代码在Ubuntu上运行良好。但在Windows上不太行。
运行时错误: 在当前进程完成引导阶段之前尝试启动新进程。 这可能意味着你在Windows上忘记在主模块中使用正确的惯用法: if __name__ == '__main__': freeze_support() ... 如果程序不会被冻结以生成Windows可执行文件,可以省略"freeze_support()"行。
我的原始代码非常长,但我能够在代码的简化版本中复现出错误。它分为两个文件,第一个是主模块,除了导入处理进程/线程的模块并调用一个方法外,几乎什么都没做。第二个模块是代码的核心部分。
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,'\n' 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() for i in mythreads: i.join() class 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() #在看到错误后添加,但没有用 for i in myprocs: i.start() for i in myprocs: i.join()