我正在执行以下代码并且它工作正常,但它不会产生到不同的进程,而是有时都在同一个进程中运行,有时是一种进程中的二合一。我正在使用4 cpu机器。这段代码有什么问题?
def f(values):
print(multiprocessing.current_process())
return values
def main():
p = Pool(4) #number of processes = number of CPUs
keys, values= zip(*data.items()) #ordered keys and values
processed_values= p.map( f, values )
result= dict( zip(keys, processed_values ) )
p.close() # no more tasks
p.join() # wrap up current tasks
结果是
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
有时像这样,
<SpawnProcess(SpawnPoolWorker-3, started daemon)>
<SpawnProcess(SpawnPoolWorker-2, started daemon)>
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
<SpawnProcess(SpawnPoolWorker-3, started daemon)>
有时,
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
<SpawnProcess(SpawnPoolWorker-4, started daemon)>
<SpawnProcess(SpawnPoolWorker-2, started daemon)>
<SpawnProcess(SpawnPoolWorker-1, started daemon)>
我的问题是,它在什么基础上将功能分配给工人?我正在编写代码,它根据我的字典中的键数来决定进程的数量(考虑到我的数据总是比我的 CPU 有更少的键)。我的代码将开始 - 主代码读取文件并使用单个进程从中制作字典,并将其分支到并发进程的数量并等待它们处理数据(我正在使用 pool.map ),然后一旦获得子进程的结果,它就会开始处理它们。我怎样才能实现这个父等待子进程步骤?