python3.6中的多处理

2024-04-26 09:32:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本词典,我正在查字典。目前我以串行方式运行这个,一次处理列表中的一个项目,这个工作很好,但是我想通过使用多处理库来加快这些项目的处理速度。在

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

我想选择一次最多指定5个线程/进程,但不确定迭代是如何工作的(即,我是先迭代“任务”还是迭代线程/进程的数量?在

例如,我有一个包含两个层次结构的字典:

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

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

所以我迭代router1。。。路由器3和每个'{'id':1,'name':'rtr1\'core'}'字典需要传递给包含单个参数(dict)的“process_routers”函数。在

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

我设法得到:

^{pr2}$

它似乎仍然是串行运行的-如何在最多x个线程中并行运行这些线程?在

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

非常感谢您的时间和帮助。在

弗兰克


Tags: 项目namecore信息id列表数量字典
1条回答
网友
1楼 · 发布于 2024-04-26 09:32:21

既然您使用的是Python3.6,您是否考虑过asyncio库?我不确定您在process\rtr函数中做了什么,所以您可能需要查看一些与asyncio兼容的库(async libraries)。应该可以这样做:

^{1}$
网友
2楼 · 发布于 2024-04-26 09:32:21

你的框架有点不对劲。确保设置了N个作业。在

^{1}$

但请注意,如果您说以下内容,您可能会感到失望:

^{pr2}$

托管字典将对您的所有数据进行pickle处理,并使其可以安全地进行锁定。这需要时间。如果你有一个带id或其他东西的托管列表,事情会进展得更快。如果yourfunction可以通过从其他源获取对底层数据的访问,则可以获得很大的速度。你所需要的只是一个简单元素(routerid1,routerid2,…)的托管/锁定列表,而不是一堆巨大的共享数据(数据量如此之大以至于你想并行处理它…)

相关问题 更多 >