我使用aiohttp來構建一個將TCP請求發送到單獨服務器的API服務器。發送TCP請求的模塊是同步的,並且是我的目的的黑盒子。所以我的問題是這些請求阻止了整個API。我需要一種將模塊請求封裝在異步協程中的方法,該協議不會阻塞其餘的API。如何在異步協程中包裝同步函數?
所以,僅僅用sleep
作爲一個簡單的例子,有沒有辦法以某種方式包裹在無阻塞協程耗時同步碼,這樣的事情:
async def sleep_async(delay):
# After calling sleep, loop should be released until sleep is done
yield sleep(delay)
return 'I slept asynchronously'
你總是在I/O塊。通過合作性多任務處理,您無法獲得所需的行爲,因爲阻止的協同程序僅在請求完成後才返回控制(收益)。 –
aiohttp適用於http。對於非http TCP,asyncio就足夠了。 – Udi