Flask怎么實現異步任務處理方式呢?
有時候一次 http 請求的處理時間過長,而其中一部分代碼又是不必同步執行的。我們就可以用以下函數把任務拋出去異步執行,同時接口立即返回。
這個函數具體的執行過程是:
調用時復制當前請求上下文 (request)
原請求立即繼續執行
func 被執行時,復制的 request 會被 push,從此這就可以被認為是一個全新的任務
須注意的是,因為復制的請求是被 push 進來的,所以 before_request 的信號不會被觸發。但之后的 after_request 和 tear_doen_request 還會有。以及,因為只復制了 request,其他的上下文變量,如 g,是沒有被復制的。
lang:python
import gevent
from flask import copy_current_request_context
def i_have_a_dream(func, *args, **kwargs):
"""
異步任務處理。本函數會立即返回,并使用 gevent 的新線程執行 func 函數(帶 request 上下文)。
"""
return gevent.spawn(copy_current_request_context(func), *args, **kwargs)
上一篇能報考哪些專業
下一篇arf和crf的鑒別