Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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_Multiprocessing_Subprocess - Fatal编程技术网

Python 使用多处理时,是否有连接进程的顺序规则?

Python 使用多处理时,是否有连接进程的顺序规则?,python,multiprocessing,subprocess,Python,Multiprocessing,Subprocess,我有三个Python脚本文件(script1.py、script2.py和script3.py),我希望script1.py和script2.py同时运行,script3.py仅在script2.py完成时启动(script3启动时script1.py还不必完成) 我有一个这样的代码来解决它,但我不确定我是否做了正确的事情: import subprocess import multiprocessing def func1(command): subprocess.run(comma

我有三个Python脚本文件(script1.py、script2.py和script3.py),我希望script1.py和script2.py同时运行,script3.py仅在script2.py完成时启动(script3启动时script1.py还不必完成)

我有一个这样的代码来解决它,但我不确定我是否做了正确的事情:

import subprocess
import multiprocessing

def func1(command):
    subprocess.run(command, shell=True)

def func2(command):
    subprocess.run(command, shell=True)

def func3(command):
    subprocess.run(command, shell=True)

if __name__ =='__main__':
    p1 = multiprocessing.Process(target=func1,args=('python3 script1.py',))
    p2 = multiprocessing.Process(target=func2,args=('python3 script2.py',))
    p3 = multiprocessing.Process(target=func3,args=('python3 script3.py',))

    p1.start()
    p2.start()
    p2.join()
    p3.start()
    p3.join()
    p1.join()

这样行吗?有更好的方法吗?
有没有一个规则,我必须加入他们的顺序,因为他们开始了吗?

是的,它将工作,没有规则的顺序


另外,您可以对所有三个进程使用相同的函数,因为它们是相同的,并且您可能需要将命令转换为列表(
args=(['python3','script1.py']),

是的,它可以工作,并且没有顺序规则


另外,您可以对所有三个进程使用相同的函数,因为它们是相同的,您可能需要将命令转换为列表(
args=(['python3','script1.py']),

是的,代码将按照您的需要运行<代码>p2。连接块,直到该过程完全完成

在我看来,在这种情况下,多线程比多处理更有意义。您的子流程实际上没有做任何工作。它们只是在繁殖另一个进程,并一直休眠,直到它返回

请考虑这种方法

import threading
import subprocess

def run_script(script_filename):
    command = f'python3 {script_filename}'
    subprocess.run(command, shell=True)

if __name__ =='__main__':
    p1 = threading.Thread(target=run_script, args=['script1.py'])
    p2 = threading.Thread(target=run_script, args=['script2.py'])
    p3 = threading.Thread(target=run_script, args=['script3.py'])

    p1.start()
    p2.start()
    p2.join()
    p3.start()
    p3.join()
    p1.join()

是的,代码将按照您的要求运行<代码>p2。连接块,直到该过程完全完成

在我看来,在这种情况下,多线程比多处理更有意义。您的子流程实际上没有做任何工作。它们只是在繁殖另一个进程,并一直休眠,直到它返回

请考虑这种方法

import threading
import subprocess

def run_script(script_filename):
    command = f'python3 {script_filename}'
    subprocess.run(command, shell=True)

if __name__ =='__main__':
    p1 = threading.Thread(target=run_script, args=['script1.py'])
    p2 = threading.Thread(target=run_script, args=['script2.py'])
    p3 = threading.Thread(target=run_script, args=['script3.py'])

    p1.start()
    p2.start()
    p2.join()
    p3.start()
    p3.join()
    p1.join()

我想你想要p3行中的
script3.py
,是的,谢谢。我会编辑的。我想你想要p3行中的
script3.py
。是的,谢谢。我会编辑。所以脚本3在脚本2完成之前不会启动,对吗?谢谢你的快速回答是的,应该使用相同的功能!所以脚本3在脚本2完成之前不会启动,对吗?谢谢你的快速回答是的,应该使用相同的功能!