这是向 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
我必须像这样检查文件夹结构中的文件
|_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