如何在多进程参数中使用函数指针
我有几个函数,它们使用的参数是一样的,如下所示:
def cat(time , dist)
return random.randint(1, 400) * time + random.randint(1, 5) * dist
def dog(time , dist)
return random.randint(1, 300) * time + random.randint(1, 7) * dist
def rabbit(time , dist)
return random.randint(1, 200) * time + random.randint(1, 3) * dist
def turtle(time , dist)
return random.randint(1, 100) * time + random.randint(1, 1) * dist
if __name__ == '__main__':
FunArray = {
1:cat
2:dog
3:rabbit
4:turtle
}
pool = multiprocessing.Pool(processes=2)
q=10
for i in xrange(1,4):
workers = pool.apply_async(FunArray[i], args=(i, q))
pool.close()
pool.join()
我只是想同时运行两个进程,并且想用一个函数指针来传递进程的函数名。但是,程序没有正常工作。
1 个回答
2
首先,这里有一些语法错误:
函数定义的开头没有冒号
:
。def cat(time , dist): ^
字典里的每个项后面没有逗号
,
。1:cat, ^
if __name__ == "__main__"
这个块应该缩进。
代码里没有导入 random
和 multiprocessing
的语句。
FuncArray
实际上是一个字典。
xrange(1, 4)
会产生 1, 2, 3(4不包括在内)。如果你想要得到 1, 2, 3, 4,你应该用 xrange(1, 5)
。不过,我更喜欢直接用 enumerate
来遍历列表。
你需要保存工人的引用,以便后面能拿到结果。
import random
import multiprocessing
def cat(time , dist):
return random.randint(1, 400) * time + random.randint(1, 5) * dist
def dog(time , dist):
return random.randint(1, 300) * time + random.randint(1, 7) * dist
def rabbit(time , dist):
return random.randint(1, 200) * time + random.randint(1, 3) * dist
def turtle(time , dist):
return random.randint(1, 100) * time + random.randint(1, 1) * dist
if __name__ == '__main__':
funcs = [cat, dog, rabbit, turtle]
pool = multiprocessing.Pool(processes=2)
q=10
workers = []
for i, func in enumerate(funcs):
worker = pool.apply_async(func, args=(i, q))
workers.append(worker)
for worker in workers:
print worker.get()
pool.close()
pool.join()