我目前有一个带有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))
但它失败了,地图在这种情况下似乎也是一样的。有没有任何方法可以创建多个进程/线程来同时执行我的功能?我的函数的每个实例都与其他实例完全不同,所以我在这里唯一关注的是速度。
由于您的5个参数在执行之间不断变化,我将使用一个在所有进程中共享的字典。这样,所有进程总是使用最新的一组参数。
这可以使用python中multiprocess.manager的共享字典来完成。请参阅以下示例:多处理:如何在多个进程之间共享dict?
当一个进程读取字典时,它会被锁定。释放锁定后,另一个进程可以再次更改值。一切都由经理处理。