gpt4 book ai didi

python - Python 3.6 中的多处理

转载 作者:行者123 更新时间:2023-12-01 01:56:40 25 4
gpt4 key购买 nike

我正在遍历字典中的字典。目前,我以串行方式运行此程序,一次处理列表中的 1 个项目,效果很好,但我想通过使用多处理库来加快这些项目的处理速度。

有很多关于进程/线程/池的信息,但我不确定我将如何实现它。

我希望可以选择一次指定最多 5 个线程/进程,但不确定迭代如何工作(即,我是否首先迭代“任务”,或者是否迭代“任务”的数量)线程/进程?

例如我有一个包含 2 个层次结构级别的字典:

dict = {'router1': {'id': 1, 'name': 'rtr1_core'}, 'router2': {'id': 2, 'name': 'rt2_core'}, 'router3': {'id': 3, 'name': 'rtr3_access'}}

(注意,我简化了每个路由器中的项目列表 - 实际上每个字典中有 20 多个键,但我使用 id 和名称来保持简单。)

所以我迭代 router1...router 3 并且每个 '{'id': 1, 'name': 'rtr1_core'}' 字典需要传递给包含单个参数的 'process_routers' 函数(字典)。

我不需要在进程之间共享信息。

我已经设法得到:

    # Process the data
p = multiprocessing.Process(target=process_rtr, args=(rtr_data,))
p.start()
p.join()

这似乎仍然以串行方式运行 - 我如何在最多 x 个线程中并行运行它们?

实际上,根据我们当前的硬件,我希望在大约 5-10 个线程中执行 process_rtr 函数大约 50k 次。因此,最好指定线程/进程的数量,这样我就可以根据需要进行调整。

非常感谢您提前抽出时间并提供帮助。

弗兰克

最佳答案

既然您使用的是 Python 3.6,您是否考虑过 asyncio 库?我不确定您在 process_rtr 函数中做什么,因此您可能需要查看一些 asyncio 兼容库( async libraries )。应该能够做这样的事情:

import asyncio
import random
dict = {'router1': {'id': 1, 'name': 'rtr1_core'},
'router2': {'id': 2, 'name': 'rt2_core'},
'router3': {'id': 3, 'name': 'rtr3_access'}}

async def process_rtr(id, name):
"""Do your execution here."""
s_time = await asyncio.sleep(random.randint(0, 5))
print(f"Processing {id}, {name}")

loop = asyncio.get_event_loop()
tasks = [asyncio.ensure_future(process_rtr(**router_details))
for router, router_details
in dict.items()]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

关于python - Python 3.6 中的多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50091695/

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