gpt4 book ai didi

python - 使用子进程同时执行两个进程的问题

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:25 24 4
gpt4 key购买 nike

我正在尝试使用 subprocess 从 python 脚本中执行 python 脚本,但遇到了某些问题。这是我想做的:

我想首先启动一个主进程(执行 python 脚本 1),在执行该进程一段时间后,我想启动一个子进程(执行 python 脚本 2)。现在,当这个子进程正在执行时,我希望主进程的执行也继续,并且当主进程完成时,它应该等待子进程完成。

下面是我写的代码。这里 Script1.py 是我导入到代码中的主流程脚本。 Script2.py 是使用 subprocess.Popen() 调用的子流程脚本。

Script1.py

import time

def func():
print "Start time : %s" % time.ctime()
time.sleep( 2 )
print "End time: %s" % time.ctime()
return 'main process'

Script2.py

import time

def sub():
count=0
while count < 5:
print "Start time : %s" % time.ctime()
time.sleep(3)
print "End time: %s" % time.ctime()
x+=1
return 'sub process'

if __name__ == '__main__':
print 'calling function inside sub process'
subval = sub()

Main_File.py 是通过导入 Script1.py 启动第一个进程的脚本,然后稍后启动子进程

Main_file.py

import subprocess
import sys
import Script1

def func1():

count=0

while x < 5:
code = Script1.func()

if x == 2:
print 'calling subprocess'
sub_result = subprocess.Popen([sys.executable,"./Script2.py"]) # Start the execution of sub process. Main process should keep on executing simultaneously
x+=1
print 'Main process done'
sub_result.wait() # even though main process is done it should wait for sub process to get over
code = sub_result # Get the value of return statement from Sub process
return code


if __name__ == '__main__':
print 'starting main process'
return_stat = func1()
print return_stat

当我运行 Main_file.py 时,它执行的输出不正确。它似乎没有执行子进程,因为我没有看到 Script2.py 中编写的任何打印语句,并且它在主进程完成后停止。我也不确定从子流程获取 return 语句的值的方式。任何人都可以帮助我尝试实现正确的输出。

注意:我是 python 和子进程的新手,所以我首先代表我尝试过。如果对概念理解不够请见谅

最佳答案

子进程调用外部程序。您的 Script2 没有执行任何操作,因为没有调用函数 sub 。也许您想使用线程:

import threading
import Script1
import Script2

def func():
thread1 = threading.Thread(target=Script1.func)
thread1.start()
thread2 = threading.Thread(target=Script2.sub)
thread2.start()
thread2.wait()

关于python - 使用子进程同时执行两个进程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com