Python 3中的多处理器并行处理和等待作业



我有一段代码,它查询数据库并返回一组ID。对于每个ID,我需要运行一个相关的查询来获得一个数据集。我想并行运行查询以加快处理速度。一旦所有进程都运行完毕,我就会构建一个文本块并将其写入文件,然后转到下一个id。

  1. 如何确保所有进程同时启动,然后等待所有进程完成,然后再转到page =...writefile操作
  2. 如果按原样运行,我会得到以下错误:Process object is not iterable(在第9行)

以下是我目前所拥有的:

from helpers import *
import multiprocessing
idSet = getIDset(10) 
for id in idSet:
ds1 = multiprocessing.Process(target = getDS1(id))
ds1list1, ds1Item1, ds1Item2 = (ds1)
    ds2 = multiprocessing.Process(target = getDS2(id))
    ds3 = multiprocessing.Process(target = getDS3(id))
    ds4 = multiprocessing.Process(target = getDS4(id))
    ds5 = multiprocessing.Process(target = getDS5(id))
    movefiles = multiprocessing.Process(moveFiles(srcPath = r'Z://', src = ds1Item2 , dstPath=r'E:/new_data_dump//'))
 ## is there a better way to get them to start in unison than this?
    ds1.start()
    ds2.start()
    ds3.start()
    ds4.start()
    ds5.start()
 ## how do I know all processes are finished before moving on?
    page = +ds1+'n' 
           +ds2+'n' 
           +ds3+'n' 
           +ds4+'n' 
           +ds5+'n' 
    writeFile(r'E:/new_data_dump/',filename+'.txt',page)

我通常将我的"进程"保存在一个列表中。

plist = []
for i in range(0, 5) :
    p = multiprocessing.Process(target = getDS2(id))
    plist.append(p)
for p in plist :
    p.start()

... do stuff ...

for p in plist :
    p.join() # <---- this will wait for each process to finish before continuing

此外,我认为您在创建流程方面存在问题。"target"应该是一个函数。不是一个函数的结果,就像你拥有它一样(除非你的函数返回函数)。

它应该是这样的:

p = Process(target=f, args=('bob',))

其中target是函数,args是像这样传递的参数的元组

def f(name) :
    print name

最新更新