Хорошо, после долгих размышлений у меня теперь есть скрипт, использующий concurrent.futures в Python 3, который работает без сбоев. Смысл этого скрипта таков:
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
был просто базовой c функцией, которая работала в последовательном режиме. Однако такое же поведение наблюдается при использовании concurrent.futures
в качестве базовой c функции ... то есть один проход l oop = один вызванный экземпляр .exe.
Что я делаю неправильно ?
Спасибо