如何使用过程处理延迟启动的应用程序

时间:2019-06-06 04:35:38

标签: python multiprocessing

我有一个在单独过程中启动的应用程序。在应用程序发现问题然后退出之前,过程一直保持活动状态。

如果应用程序启动成功与否,如何处理流程需要报告的情况?我能想到的几种方法,

  1. 等待一段时间,然后检查过程是否仍然存在。
  2. 一段时间后检查过程状态。 -这种方法不足以适合我的用例。

我敢肯定,对于这个问题,还有更优雅的解决方案。

from multiprocessing import Process, ProcessError
import time 
from flask import Flask

def start_app():
    app = Flask(__name__)
    @app.route('/')
    def hello_world():
       return 'Hello World'
    app.run()  
    # ----> After few milliseconds (not known), there is an exception (port in use, run time exception) and process will exit at that time. 

p = Process(target=start_app)
p.start()
p.is_alive() # ----> True
time.sleep(5) 
p.is_alive() # ----> False or still True

如果我无法入睡,我可以确定该过程不会在下一毫秒内退出。

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用Process.join,它将阻塞直到过程p终止,这样等待时间将永远不会超过过程需要完成的时间。

您也可以将其与超时一起使用,这样它将阻塞直到p终止超时:

try:
    p.join(10)
except multiprocessing.TimeoutError:
    logging.info("The process lasted more than 10 seconds")