Python中的多进程处理

0 投票
2 回答
1113 浏览
提问于 2025-04-16 04:55

我想知道怎么控制这个函数 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'来知道是哪个过程。

希望这对你有帮助。

撰写回答