Python 3-使用current.futures并行调用.exe的多个实例

问题描述 投票:0回答:1

好吧,经过很多摆弄之后,我现在有了一个在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的一个实例。

我在做什么错?

谢谢

python-3.x concurrent.futures
1个回答
0
投票

此问题的解决方法正在更改:

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

...到:

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

...这将并行打开一系列相同的可执行文件。我现在遇到了与concurrent.futures有关的损坏的池错误,但是我已经解决了我陈述的问题...

© www.soinside.com 2019 - 2024. All rights reserved.