回覆列表
  • 1 # 小鹹哥

    請參考這個例子,本質是Python多執行緒

    from flask import Flask

    import time

    from concurrent.futures import ThreadPoolExecutor

    executor = ThreadPoolExecutor(1)

    app = Flask(__name__)

    @app.route("/synchronize")

    def update_redis():

    executor.submit(do_update)

    return "ok"

    def do_update():

    time.sleep(3)

    print("start update")

    if __name__ == "__main__":

    app.run()

  • 2 # 家族帝國

    有時候一次 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)

  • 中秋節和大豐收的關聯?
  • 最近經常感冒,是不是免疫力下降了呢?