好吧,经过很多摆弄之后,我现在有了一个在Python 3中使用current.futures的脚本,该脚本可以正常运行。该脚本的重点是:
1)将字典分解为小命令。
2)对于函数test_printer
的每一次调用,调用一个可执行文件。
3)这是并行而不是串行。
from itertools import islice
import subprocess
from collections import OrderedDict
import concurrent.futures
global pair_dict
pair_dict = {
1: 'one',
2: 'two',
3: 'three',
4: 'four',
5: 'five',
6: 'six',
7: 'seven',
8: 'eight'
}
global test_printer
fin_dict = OrderedDict(sorted(pair_dict.items()))
def test_printer(start_chunk, end_chunk):
#sub_dict = dict(pair_dict.items()[start_chunk:end_chunk])
sub_dict = dict(list(pair_dict.items())[start_chunk:end_chunk])
for key, value in sub_dict.items():
#print(key, value)
subprocess.call(["C:\\mypath\\myfile.exe"])
print(key, value)
print('-' * 50)
with concurrent.futures.ProcessPoolExecutor(max_workers=10) as executor:
for i in range(2, 9, 2):
start_chunk = i - 2
end_chunk = i
test_printer(start_chunk, end_chunk)
...以前,concurrent.futures
范围内的代码只是串行操作的基本功能。但是,使用concurrent.futures
作为基本功能时,也会观察到相同的行为。一遍循环=调用.exe的一个实例。
我在做什么错?
谢谢
此问题的解决方法正在更改:
subprocess.call(["G:\\WebGrab+Plus\\bin\\WebGrab+Plus.exe"])
...到:
subprocess.Popen(["G:\\WebGrab+Plus\\bin\\WebGrab+Plus.exe"])
...这将并行打开一系列相同的可执行文件。我现在遇到了与concurrent.futures
有关的损坏的池错误,但是我已经解决了我陈述的问题...