uWSGI + flask +自己的多进程?

时间:2017-06-08 16:04:14

标签: python flask multiprocessing uwsgi

我用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"做这个工作?

1 个答案:

答案 0 :(得分:0)

我有两个针对您的建议:

  1. 为您的工作人员创建一个单独的systemd进程。如果您的工作进程不需要与您的Web进程进行通信,则可以使用此方法,而他们可以通过其他协调程序(例如:数据库,Redis,Celery经纪人)进行通信。

  2. 使用uwsgi ule子https://uwsgi-docs.readthedocs.io/en/latest/Mules.html