Python 3 - Использование concurrent.futures для одновременного вызова нескольких экземпляров .exe - PullRequest
0 голосов
/ 08 апреля 2020

Хорошо, после долгих размышлений у меня теперь есть скрипт, использующий 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.

Что я делаю неправильно ?

Спасибо

1 Ответ

0 голосов
/ 08 апреля 2020

Исправление для этого менялось:

subprocess.call(["G:\\WebGrab+Plus\\bin\\WebGrab+Plus.exe"])

... на:

subprocess.Popen(["G:\\WebGrab+Plus\\bin\\WebGrab+Plus.exe"])

... это открывает серию одного и того же исполняемого файла параллельно. Сейчас я получаю ошибку неработающего пула в отношении concurrent.futures, но я решил указанную проблему ...

...