簡體   English   中英

在Flask Python中產生一個單獨的執行線程(即向dev發送日志電子郵件)?

[英]Spawning a separate thread of execution (i.e. sending log email to dev) in Flask Python?

我正在運行一個在uwsgi后面運行的Flask webapp(2個進程)。 我的代碼的一部分涉及ping遠程資源,查看它是否已被修改( If-Modified-Since ),並在Web服務器上更新該資源的本地副本(如果已修改)。

該更新還向我發送了差異的電子郵件。 我擔心這需要很長時間,導致用戶請求在發送電子郵件時超時。

Python線程庫是解決這個問題的正確方法嗎? (產生一個線程並在那里發送電子郵件?)這會干擾uwsgi的進程嗎?

謝謝您的幫助!

(旁注:如果他們都試圖更新本地副本上的資源,我也有點擔心2個uwsgi進程碰撞頭...我想知道線程模塊的鎖定功能是否正確這個問題也是?)

編輯:澄清一下,我主要擔心的是電子郵件任務是代碼執行的一部分。 它需要很長時間並在return_template調用之前運行,因此會阻止對用戶的響應。 考慮到Flask / uwsgi環境,Python線程庫是否是解決此問題的正確方法?

這類任務的最佳解決方案是使用uWSGI假脫機程序。 如果你想以特定的間隔運行任務,你可以使用@timer裝飾器讓假脫機程序進行努力工作:

from uwsgidecorators import *

#this will execute the_task() every 30 seconds in the spooler
@timer(30, target='spooler')
def the_task(signum)
    do_the_long_task()

如果您嘗試創建一個獨立於服務器的應用程序(例如,如果您考慮過稍后用Gunicorn替換uWSGI),我建議您使用Celery

以下是第一步: http//docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html

暫無
暫無

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

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