【发布时间】:2015-02-09 22:21:59
【问题描述】:
我一直在关注文档以尝试了解多处理池。我想出了这个:
import time
from multiprocessing import Pool
def f(a):
print 'f(' + str(a) + ')'
return True
t = time.time()
pool = Pool(processes=10)
result = pool.apply_async(f, (1,))
print result.get()
pool.close()
print ' [i] Time elapsed ' + str(time.time() - t)
我正在尝试使用 10 个进程来评估函数 f(a)。我已在f 中添加了打印声明。
这是我得到的输出:
$ python pooltest.py
f(1)
True
[i] Time elapsed 0.0270888805389
在我看来,函数f 只被评估一次。
我可能没有使用正确的方法,但我正在寻找的最终结果是同时使用 10 个进程运行 f,并获得每个进程返回的结果。所以我会列出 10 个结果(可能相同也可能不同)。
关于多处理的文档非常混乱,要弄清楚我应该采用哪种方法并非易事,在我看来,f 在我上面提供的示例中应该运行 10 次。
【问题讨论】:
-
apply_async 并不意味着启动 多个 进程;它只是为了在池的一个进程中调用带有参数的函数。如果您希望函数被调用 10 次,则需要进行 10 次调用。
-
@JoshuaTaylor 明白了,感谢您的澄清。最好的方法是
for循环 10 次调用,还是在multiprocessing模块中有更合适的工具来实现我想要实现的目标? -
你想每次都用相同的参数调用函数吗?
-
@JoshuaTaylor 是的,它是相同参数的 10 倍。该函数依赖于从网络中获取的其他变量,因此每次结果可能不同。
-
啊,所以你每次都有不同的功能?然后你基本上有一个函数列表,并且你多次调用“应用这个函数”。好的
标签: python multithreading multiprocessing threadpool