Python uWSGI&x2B;烧瓶+;拥有多进程?

Python uWSGI&x2B;烧瓶+;拥有多进程?,python,flask,multiprocessing,uwsgi,Python,Flask,Multiprocessing,Uwsgi,我用uWSGI运行一个flask服务器。 该过程由systemd启动 现在我需要一些以“while(True)”运行的子流程,它们必须始终收集一些信息 我现在开始使用多处理的子流程 下面是我的一些代码: from multiprocessing import Process, Value def start_flask_server(): daemon_data = Value('d', 0.0) p = Process(target=worker, args=(daemon_d

我用uWSGI运行一个flask服务器。 该过程由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”来完成此项工作?

我有两个反建议:

  • 为您的员工创建单独的systemd流程。如果您的工作进程不需要与web进程通信,那么这是可行的,当然,它们可以通过其他协调进程(例如:数据库、Redis、芹菜代理)进行通信

  • 使用uwsgi骡子


  • 我不太明白你的设置。您是否从flask应用程序创建这些流程?他们来自完全不同的剧本吗?为什么你命名这个函数为
    start\u flask\u server
    ,那些工人在启动flask应用程序吗?对,是工人在启动flask应用程序。我有一个uwsgi服务,可以启动这个。我现在只需要一个新的工作者、线程或另一个进程(可以与我的flask应用程序通信)就可以一直做一些事情。然后,我的flask应用程序应该能够询问该进程的最后状态。