我有一个在单独进程中启动的应用程序。进程保持活动状态,直到应用发现问题然后退出。
如何处理进程需要报告应用程序是否成功启动的情况?我能想到的几种方法,
- 等待一段时间,然后检查进程是否仍处于活动状态。
- 一段时间后检查进程状态。 - 这种方法不适合我的用例。
我相信这个问题有更优雅的解决方案。
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
如果我睡觉,没有办法,我可以确定该过程不会在下一毫秒内退出。
提前谢谢。
您可以使用
Process.join
,它将阻塞直到进程p
终止,这样等待时间永远不会大于进程需要完成的时间。
您也可以在超时的情况下使用它,这样它就会阻塞,直到p
终止或达到超时:
try:
p.join(10)
except multiprocessing.TimeoutError:
logging.info("The process lasted more than 10 seconds")