簡體   English   中英

Python龍卷風-進行異步通話?

[英]Python Tornado — Make calls async?

所以我在Tornado應用程序中有一個看起來像這樣的代碼塊:

fetch_results = yield {
    'itemOne': make_network_call_one(),
    'itemTwo': make_network_call_two(),
    'itemThree': make_network_call_three()
}

這三個網絡調用顯然是異步的。

現在,我有個bool告訴我是否需要實際進行這些網絡調用。

例如:

if should_fetch_item_one:
    item_one = yield make_network_call_one()
if should_fetch_item_two:
    item_two = yield make_network_call_two()
if should_fetch_item_three:
    item_three = yield make_network_call_three()

以仍然異步的方式執行此操作的最佳/最新方式是什么? (我意識到我可以檢查這三個布爾值的所有可能組合,並產生一個類似於第一個代碼塊的對象,但我希望避免這種情況。)

(我使用的是Python 2.7)

這個怎么樣?:

from tornado.concurrent import Future
from tornado import gen

@gen.coroutine
def f():
    resolved = Future()
    resolved.set_result(None)

    tasks = {}
    tasks['itemOne'] = make_network_call_one() if should_make_call_one else resolved
    tasks['itemTwo'] = make_network_call_two() if should_make_call_two else resolved
    tasks['itemThree'] = make_network_call_three() if should_make_call_three else resolved
    results = yield tasks

“已解決”的重點是確保“任務”字典始終具有相同的三個鍵:“ itemOne”,“ itemTwo”和“ itemThree”。 “任務”中的所有值都是期貨:由協程(如make_network_call_one返回的期貨,或“已解決”的期貨。

屈服字典會暫停協程,直到完成所有操作。 在“已解決”的情況下,它已經完成,其值為“無”,在make_network_call_one等情況下,該操作可能需要一些時間。 現在,“結果”是一個與“任務”具有相同鍵集的字典,但是“任務”中的所有期貨都被值替換。

暫無
暫無

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

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