我有一个在单独过程中启动的应用程序。在应用程序发现问题然后退出之前,过程一直保持活动状态。
如果应用程序启动成功与否,如何处理流程需要报告的情况?我能想到的几种方法,
我敢肯定,对于这个问题,还有更优雅的解决方案。
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
如果我无法入睡,我可以确定该过程不会在下一毫秒内退出。
谢谢。
答案 0 :(得分:0)
您可以使用Process.join
,它将阻塞直到过程p
终止,这样等待时间将永远不会超过过程需要完成的时间。
您也可以将其与超时一起使用,这样它将阻塞直到p
终止或超时:
try:
p.join(10)
except multiprocessing.TimeoutError:
logging.info("The process lasted more than 10 seconds")