第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

異步 HTTP 請求,不會阻塞主線程

異步 HTTP 請求,不會阻塞主線程

青春有我 2023-12-29 16:07:13
我有一個主線程,它始終需要可用于讀取鍵盤按鍵輸入。每次按鍵時,我必須運行 4 個功能,例如顯示、保存到文件以及發(fā)出 HTTP 請求等。按鍵的速度比執(zhí)行 4 個功能的速度更快。我的邏輯如下,但無法看到如何保持 key_press() 始終運行,因為我必須等待函數(shù)在某個時刻完成。async def main():  async with aiohttp.ClientSession() as client:  while True:    pressed_key = key_press()     if pressed_key != "":        f1 = asyncio.create_task(do_something1())        f2 = asyncio.create_task(do_something2())        f3 = asyncio.create_task(do_something3())        f4 = asyncio.create_task(send_to_API())            await f1,f2,f3,send_to_APIasyncio.run(main())    我是否應(yīng)該嘗試一些額外的邏輯,在遞歸調(diào)用 asyncio.tasks 后進行更多循環(huán)?或者我應(yīng)該考慮多線程,讓一個線程活動運行 key_press() 并在其他地方進行異步調(diào)用?有什么想法或暗示朝著好的方向發(fā)展嗎?
查看完整描述

1 回答

?
哆啦的時光機

TA貢獻1779條經(jīng)驗 獲得超6個贊

如果您嘗試借助input(key_press示例中的函數(shù))模擬USB數(shù)據(jù)流,則必須使用multithreading模塊,因為它input是一個阻塞函數(shù),它將停止asyncio線程中的循環(huán)工作。要asyncio與input函數(shù)結(jié)合,您必須使用另一個線程,請查找以下示例:


import asyncio

import threading



async def do_work(i):

    """take input key and do some work with the input"""

    await asyncio.sleep(5)

    print(i)



async def main_thread_loop_work(_key):

    """simulate multiple tasks caused by key input"""

    t1 = asyncio.create_task(do_work(_key))

    t2 = asyncio.create_task(do_work(_key))

    t3 = asyncio.create_task(do_work(_key))

    await t1

    await t2

    await t3



def thead_worker(_key):

    """target function for another thread"""

    asyncio.run(main_thread_loop_work(_key))



if __name__ == '__main__':

    while True:

        some_key = input("Please provide any key: ")

        th = threading.Thread(target=thead_worker, args=(some_key, ))

        th.start()


查看完整回答
反對 回復(fù) 2023-12-29
  • 1 回答
  • 0 關(guān)注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號