Python中的多进程处理
我想知道怎么控制这个函数 pool apply_asyn 的返回值,假设我有以下的代码
import multiprocessing:
de fun(..)
...
...
return value
my_pool = multiprocessing.Pool(2)
for i in range(5) :
result=my_pool.apply_async(fun, [i])
some code going to be here....
digest_pool.close()
digest_pool.join()
here i need to proccess the results
我怎么才能控制每个进程的结果值,并且知道怎么检查这个结果属于哪个进程呢?
2 个回答
0
你确定你需要知道你的两个工作者现在各自正在做什么吗?如果是这样的话,使用进程和队列可能更合适,因为这听起来需要在多个进程之间进行一些通信。
如果你只是想知道哪个结果是由哪个工作者处理的,你可以简单地返回一个元组:
#!/usr/bin/python
import multiprocessing
def fun(..)
...
return value, multiprocessing.current_process()._name
my_pool = multiprocessing.Pool(2)
async_result = []
for i in range(5):
async_result.append(my_pool.apply_async(fun, [i]))
# some code going to be here....
my_pool.join()
result = {}
for i in range(5):
result[i] = async_result[i].get()
如果你有不同的输入变量作为一个列表,使用 map_async
命令可能是个更好的选择:
#!/usr/bin/python
import multiprocessing
def fun(..)
...
...
return value, multiprocessing.current_process()._name
my_pool = multiprocessing.Pool()
async_results = my_pool.map_async(fun, range(5))
# some code going to be here....
results = async_results.get()
最后一行是将所有的工作者连接在一起。请注意,结果是一个元组的列表,每个元组包含你计算的值和计算这个值的进程的名称。
0
把for循环中的'i'的值保存下来,然后可以选择打印出来或者把它存到其他地方。这样如果发生了某个过程,你就可以通过查看这个变量'i'来知道是哪个过程。
希望这对你有帮助。