簡體   English   中英

uWSGI + Flask + 自己的多進程?

[英]uWSGI + flask + own multiprocess?

我用 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“工人”來完成這項工作?

我有兩個反建議給你:

  1. 為您的工作人員創建一個單獨的 systemd 進程。 如果您的工作進程不需要與您的 Web 進程通信,那么這會起作用,其中它們可以通過其他一些協調進程(例如:數據庫、Redis、Celery 代理)來進行。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM