我有几个使用相同参数的函数,如下所示
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()
我只想同时运行两个进程,我想使用函数指针来传递进程的函数名。但是,该程序无法正常工作。
答案 0 :(得分:1)
首先有一些语法错误:
没有:
结束functiton定义标题。
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()