gpt4 book ai didi

python - 如何在多处理参数中使用函数指针

转载 作者:行者123 更新时间:2023-12-01 05:12:07 24 4
gpt4 key购买 nike

我有几个使用相同参数的函数,如下所示

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()

我只想同时运行两个进程,并且我想使用函数指针来传递进程的函数名称。但是,该程序无法运行。

最佳答案

首先有一些语法错误:

  • : 函数定义 header 结尾。

    def cat(time , dist):
    ^
  • 字典文字的每一项后面没有,:

    1:cat,
    ^
  • if __name__ == "__main__" block 应该缩进。

没有导入随机多处理的导入语句

FuncArray 实际上是一个字典。

xrange(1, 4) 产生 1, 2, 3。(不包括 4)。如果你想要yield 1, 2, 3, 4,你应该使用xrange(1, 5)。但是,我宁愿直接使用 enumerate 迭代列表。

您需要保存 worker 引用以便稍后返回结果。

<小时/>
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()

关于python - 如何在多处理参数中使用函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23976025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com