![](/img/trans.png)
[英]How to write your own async/awaitable coroutine function in Python?
[英]How to write your own python awaitable function that is not only calls other async functions?
我有一個阻塞 function:
def blocking_function():
doing.start_preparing()
while not doing.is_ready():
pass
return doing.do()
我想將其更改為異步 function。
我已經閱讀了一些 asyncio 的源代碼,並且找到了這兩個選項:
@types.coroutine
def yield_option() -> typing.Generator:
doing.start_preparing()
while not doing.is_ready():
yield
return doing.do()
def future_and_call_soon_option() -> asyncio.Future:
doing.start_preparing()
loop = asyncio.get_running_loop()
future = loop.create_future()
def inner():
if not doing.is_ready():
loop.call_soon(inner)
else:
future.set_result(doing.do())
inner()
return future
async def main():
await asyncio.gather(yield_option(), future_and_call_soon_option()) #runs concurently
asyncio.run(main())
這兩個選項都有效,但哪個更好? 還是有更好用的第三種選擇?
怎么樣:
async def blocking_function():
doing.start_preparing()
while not doing.is_ready():
await asyncio.sleep(0)
return doing.do()
這將與其他任務合作。 如果阻塞函數足夠快,它很簡單並且在實踐中可能是可以接受的。 但是如果阻塞函數需要大量時間,最好將它們移動到另一個線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.