gpt4 book ai didi

python - 每当子进程在 Python 3 的多处理池中完成时打印更新行

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:29 24 4
gpt4 key购买 nike

我正在使用 Python 的 multiprocessing 库通过内置 map() 方法处理输入列表。这是相关的代码段:

subp_pool = Pool(self.subprocesses)
cases = subp_pool.map(self.get_case, input_list)
return cases

要并行运行的函数是 self.get_case(),输入列表是 input_list

我希望以以下格式将进度提示打印到标准输出:

Working (25/100 cases processed)

如何更新包含 Pool 的类中的局部变量,以便每当子进程完成时,该变量都会增加 1(然后打印到标准输出)?

最佳答案

无法使用multiprocessing.map来执行此操作,因为它在完成所有任务之前不会向主进程发出任何警报。但是,您可以通过使用 apply_async 获得类似的行为与callback关键字参数一起使用:

from multiprocessing.dummy import Pool
from functools import partial
import time

class Test(object):
def __init__(self):
self.count = 0
self.threads = 4

def get_case(self, x):
time.sleep(x)

def callback(self, total, x):
self.count += 1
print("Working ({}/{}) cases processed.".format(self.count, total))

def do_async(self):
thread_pool = Pool(self.threads)
input_list = range(5)
callback = partial(self.callback, len(input_list))
tasks = [thread_pool.apply_async(self.get_case, (x,),
callback=callback) for x in input_list]
return [task.get() for task in tasks]

if __name__ == "__main__":
t = Test()
t.do_async()

关于python - 每当子进程在 Python 3 的多处理池中完成时打印更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29417442/

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