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

Is this the correct way to send multiple arguments to 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)

但我想通过使用多处理 (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