这是发送多个参数到concurrent.futures.ThreadPoolExecutor的正确方式吗?



我必须检查像这样的文件夹结构中的文件

|_HMR
| |__2015
| |__2016
| |__2017
|
|_TMR1
|__2015
|__2016
|__2017

我使用这样调用我的函数,它工作得很好

check_continuity('TMR1', 2015)
check_continuity('TMR1', 2016)
check_continuity('TMR1', 2017)
check_continuity('HMR', 2015)
check_continuity('HMR', 2016)
check_continuity('HMR', 2017)

但是我想通过使用multiprocessing (concurrent.futures)来加快速度,所以这是向我的函数发送参数的正确方式吗?因为第一个参数只有两个变体,第二个参数有三个。我想让第一个参数运行三年,第二个参数运行三年。

简而言之,我希望得到的结果像我以前单独调用函数的方式,但更快

我试图这样做,但看起来它缺少几个组合

if __name__ == '__main__':
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
print('creating ThreadPoolExecutor')
start_scrape1 = executor.map(check_continuity, ('HMR', 'TMR1'), (2015, 2016, 2017))

您想要像你有像('HMR', 'TMR1'),(2015, 2016, 2017)这样的论点所以它从第一个中取出一个,从第二个中取出一个('HMR', 2015),('TMR1', 2016),因为第一个耗尽了,它完成了。

所以你要提供的是('HMR','HMR','HMR','TMR1','TMR1','TMR1')(2015, 2016, 2017,2015, 2016, 2017)

[i for i in p for j in year]

实际上与

相同
temp = []
for i in p:
for j in year:
temp.append(i)

将给出['HMR', 'HMR', 'HMR', 'TMR1', 'TMR1', 'TMR1']year*len(p)将提供(2015, 2016, 2017,2015, 2016, 2017)

这里的循环适用于

def check_continuity(a,b):
print(a,b)
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
print('creating ThreadPoolExecutor')
p = ('HMR', 'TMR1')
year = (2015, 2016, 2017)
start_scrape1 = executor.map(check_continuity, [i for i in p for j in year], year*len(p))

输出
creating ThreadPoolExecutor
HMR 2015
HMR 2016
HMR 2017
TMR1 2015
TMR1TMR1 2017
2016

相关内容

  • 没有找到相关文章

最新更新