Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用多线程运行多个可执行文件_Python_Python 3.x_Multithreading_Exe - Fatal编程技术网

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

Python 如何使用多线程运行多个可执行文件,python,python-3.x,multithreading,exe,Python,Python 3.x,Multithreading,Exe,我正在尝试从以下位置运行.exe文件 代码: 错误: TypeError: 'str' object is not callable 我知道我们可以使用import subprocess调用.exe文件,但是subclass.call()将开始一次只执行一个文件,完成第一个.exe文件后,它将开始执行第二个.exe文件。我需要同时运行一个或多个.exe文件,首先完成执行的.exe文件将被打印(我的.exe文件将在其任务完成后打印) 多线程将只支持可调用函数或.exe文件 如果多线程不支持,请向

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

代码:

错误:

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

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

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


我还尝试了导入多进程,并使用
多进程.process()
运行.exe文件,但没有成功。

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

对于您的用例,
os.system
将作为
目标:

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()
但是,实际上不需要使用线程来等待子进程;您只需使用
子流程
模块即可:

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")

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

对于您的用例,
os.system
将作为
目标:

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()
但是,实际上不需要使用线程来等待子进程;您只需使用
子流程
模块即可:

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")

正确缩进您的代码。大多数情况下,重复的代码(虽然其中的答案没有解释如何等待进程完成)可以正确缩进代码。大多数情况下,重复的代码(虽然答案没有解释如何等待进程完成)可以正常工作,但
proc.wait(timeout=15)
不起作用。我还引发了TimeoutExpired异常,但也不起作用。即使在超时之后,上述进程仍在执行。[上述2.exe将需要10到30秒才能完成执行]。我还尝试了Popen(exe,timeout=15)-得到“TypeError”。如果不希望进程继续执行,则需要终止进程
proc.terminate()
。只有在超时后,我才能终止进程。但超时不起作用。
.wait()
等待进程停止或超时发生。你需要检查它是否已经停止,如果没有,杀死它。在新问题中显示您的代码和您的意图,并将其链接到此处,我们可以提供帮助。上述代码可以工作,但
proc.wait(timeout=15)
不工作。我还引发了TimeoutExpired异常,但也不起作用。即使在超时之后,上述进程仍在执行。[上述2.exe将需要10到30秒才能完成执行]。我还尝试了Popen(exe,timeout=15)-得到“TypeError”。如果不希望进程继续执行,则需要终止进程
proc.terminate()
。只有在超时后,我才能终止进程。但超时不起作用。
.wait()
等待进程停止或超时发生。你需要检查它是否已经停止,如果没有,杀死它。在新问题中显示您的代码和意图,并将其链接到此处,我们可以提供帮助。