如何使用多线程运行多个可执行文件

2024-04-20 04:32:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从以下位置运行.exe文件

代码:

if __name__ == '__main__':
job1 = threading.Thread(target='C:\\Users\\XYZ\\PycharmProjects\\Task1\\dist\\Multiof2.exe')
job2 = threading.Thread(target='C:\\Users\\XYZ\\PycharmProjects\\Task2\\dist\\Multiof5.exe')

job1.start()
job2.start()

job1.join()
job2.join()

错误:

TypeError: 'str' object is not callable

我知道我们可以使用import subprocess调用.exe文件,但是subclass.call()将开始一次只执行一个文件,完成第一个.exe文件后,它将开始执行第二个.exe文件。我需要同时运行一个或多个.exe文件,首先完成执行的.exe文件将被打印(我的.exe文件将在其任务完成后打印)

多线程将只支持可调用函数或.exe文件

如果多线程不支持,请向我建议如何运行多个.exe文件

我还尝试了import multiprocess并使用multiprocess.process()运行.exe文件,但不起作用


Tags: 文件importtargetdistexethreadstartusers
1条回答
网友
1楼 · 发布于 2024-04-20 04:32:47

target需要是可调用的;它是用一些给定的参数调用的

对于您的用例,os.system将作为target执行:

import threading
import os

if __name__ == "__main__":
    exes = [
        "C:\\Users\\XYZ\\PycharmProjects\\Task1\\dist\\Multiof2.exe",
        "C:\\Users\\XYZ\\PycharmProjects\\Task2\\dist\\Multiof5.exe",
    ]
    threads = [
        threading.Thread(target=os.system, args=(exe,)) for exe in exes
    ]
    for thread in threads:
        thread.start()
    for thread in threads:
        thread.join()

但是,实际上不需要使用线程来等待子进程;您可以只使用subprocess模块:

import subprocess
if __name__ == "__main__":
    exes = [
        "C:\\Users\\XYZ\\PycharmProjects\\Task1\\dist\\Multiof2.exe",
        "C:\\Users\\XYZ\\PycharmProjects\\Task2\\dist\\Multiof5.exe",
    ]
    procs = [subprocess.Popen(exe) for exe in exes]
    for proc in procs:
        proc.wait()
        if proc.returncode != 0:
            print(proc, "failed")

相关问题 更多 >