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