我对Python 3.6的asyncio相当新手
我的问题是,我有一个类,想在其中初始化一些属性。其中一个属性是来自异步函数的返回值。
最佳实践是什么?
在init函数中调用event_loop一次以获取返回值?
将__init__函数设置为async? 并在事件循环中运行?
干杯!
以下是我的代码:
import asyncio
import aioredis
from datetime import datetime
class C:
def __init__(self):
self.a = 1
self.b = 2
self.r = None
asyncio.get_event_loop().run_until_complete(self._async_init())
async def _async_init(self):
# this is the property I want, which returns from an async function
self.r = await aioredis.create_redis('redis://localhost:6379')
async def heart_beat(self):
while True:
await self.r.publish('test_channel', datetime.now().__str__())
await asyncio.sleep(10)
def run(self):
asyncio.get_event_loop().run_until_complete(self.heart_beat())
c=C()
c.run()
__init__
异步化的最佳实践是不要这样做。如果您尝试在事件循环已经运行时实例化一个实例,它将无法工作。 - dirn