来吧!由于使用了一种异步方式,它使您可以更改所有项目。告诉我这不是真的。
这是真的
使用
await关键字的整个想法是在一个事件循环中从代码的不同位置执行并发作业(这对于常规功能代码是无法做到的)。
asyncio-不是某种实用程序,而是编写异步程序的整体风格。
另一方面,Python非常灵活,因此您仍然可以尝试隐藏asyncio的使用。如果您确实想要获取3个Fetcher实例的同步结果,则可以执行以下 *** 作:
import asynciodef sync_exec(coro): loop = asyncio.get_event_loop() return loop.run_until_complete(coro)class Fetcher: async def async_get_result(self): # async interface: async def async_job(): await asyncio.sleep(1) return id(self) return (await async_job()) def get_result(self): # sync interface: return sync_exec(self.async_get_result()) @classmethod def get_results(cls, *fetchers): # sync interface multiple: return sync_exec( asyncio.gather(*[fetcher.async_get_result() for fetcher in fetchers]) )# single sync get_result:f1 = Fetcher()print('Result: ', f1.get_result())# multiple sync get_result:f2 = Fetcher()f3 = Fetcher()print('Results: ', Fetcher.get_results(f1, f2, f3))
输出:
Result: 2504097887120Results: [2504097887120, 2504104854416, 2504104854136]
但是,再次重申,如果您继续以这种方式编写代码,您一定会后悔的,相信我。如果要充分利用异步编程的优势,请使用
coroutines和
await显式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)