异步装饰器python3.6

时间:2020-03-16 05:57:01

标签: asynchronous python-3.6 decorator contextmanager asyncpg

我有以下代码用于建立PG连接。

class Engine:
@property
async def engine(self):
          self._engine = await asyncpg.create_pool(PG_URI)

          return self._engine




@async_generator.asynccontextmanager
async def transaction(self, *args, **kwargs):
    engine = self.engine
    conn = await self.engine()
    async with conn.acquire() as txn:
        await txn.execute("EXECUTE-SOMETHING-TO CHANGE PG TIMEEOUT")
        yield txn

def __call__(self):
    """Retry a transaction on an OperationalError."""

    def t(f):
        @wraps(f)
        async def g(*args, **kwargs):
            async with self.transaction(f.__name__) as txn:
                return f(txn, *args, **kwargs)
        return g

    return t

在另一个模块中,请输入model.py

engine = Engine()
@engine()
async def retry_delivery(txn):
try:
    result = await txn.fetchrow("EXECUTE SOME QUERY")

    if result is None:
        return []
    else:
        return [dict(result)["id"]]
finally:
    txn.close()

当我尝试致电retry_delivery时,出现错误TypeError: 'coroutine' object is not iterable。 经过大量搜寻后,我到达了这一点。请提出我错了的地方或任何更好的实现方法。谢谢!

0 个答案:

没有答案
相关问题