我用uWSGI运行一个烧瓶服务器。 该过程由systemd启动。
现在我需要一些使用" while(True)"运行的子进程,他们必须一直收集一些信息。
我现在开始使用多处理的子进程。
这里有一些来自我的代码:
from multiprocessing import Process, Value
def start_flask_server():
daemon_data = Value('d', 0.0)
p = Process(target=worker, args=(daemon_data, 1))
p.daemon=True
p.start()
然后我重新启动/停止使用systemd的uWSGI,进程阻塞,当然它不受SIG影响。
我的第一个想法是实现一个单手柄:
for i in [x for x in dir(signal) if x.startswith("SIG")]:
try:
signum = getattr(signal,i)
signal.signal(signum, signal_term_handler)
app.logger.debug("Added Handler SIG: %s"%i)
except Exception as e:
app.logger.error(e)
app.logger.error("Skipping %s"%i)
但不幸的是他们没有开火......
如果服务器将要关闭,或者我可以在我的应用程序中启动uWSGI" worker"做这个工作?
答案 0 :(得分:0)
我有两个针对您的建议:
为您的工作人员创建一个单独的systemd进程。如果您的工作进程不需要与您的Web进程进行通信,则可以使用此方法,而他们可以通过其他协调程序(例如:数据库,Redis,Celery经纪人)进行通信。
使用uwsgi ule子https://uwsgi-docs.readthedocs.io/en/latest/Mules.html