首页 > 解决方案 > 具有 5 个参数的 Python 多处理

问题描述

我目前有一个带有 5 个参数的函数,该函数来自它执行的一个 for 循环,来自一个国家列表,然后它从一个站点列表(超过 20 个)中迭代。它执行一些操作,然后从更大的函数运行

我的代码如下:

sitelist= ['zzz', 'xxx', 'yyy']
for site in sitelist:
   startime, endtime = createtime(timer,site)
   excludedlistpaths = excludedlist(site)
   finallist = []
   bigfunc(site,startime,endtime,excludelistpaths)
  

目前我的网站列表正在增加,所以我正在研究使用多线程/多处理,但我遇到了困难,因为我的函数有多个参数每次都会改变。我的第一个想法是在哪里使用类似的东西:

 with ThreadPoolExecutor(max_workers=4) as executor:
      for site in sitelist:
               executor.submit(bigfunc, site,startime,endtime,excludelistpaths))

但它失败了,在这种情况下,地图似乎也是一样的。有没有办法创建多个进程/线程来同时同时执行我的功能?我的函数的每个实例都与其他函数完全分开,所以我在这里唯一关注的是速度。

标签: pythonmultithreadingmultiprocessing

解决方案


由于您的 5 个参数在执行之间不断变化,我将使用一个在所有进程之间共享的字典。这样,所有进程总是使用最新的参数集。

这可以使用 python 中 multiprocess.manager 中的共享字典来完成。请参阅此示例:多处理:如何在多个进程之间共享字典?

当一个进程读取字典时,字典被锁定。释放锁后,另一个进程可以再次更改这些值。一切由经理处理。


推荐阅读