python异步特殊类方法__delete __

时间:2017-04-07 01:49:15

标签: python class asynchronous

海峡到了这一点:

我如何async def特殊类方法,如python中的__delete__

为什么我需要这个:

为了实现在多个进程之间共享的一个好的缓存系统,我想从数据库中检索一次数据并将它们存储在缓存中,修改缓存中的数据以及何时不再使用数据:更新数据库。我的问题是,为了知道哪个实例是最后一个,我想异步使用__delete__特殊方法

def asyncinit(cls):
    """Credits: http://stackoverflow.com/a/33140788/4241798"""
    __new__ = cls.__new__

    async def init(obj, *arg, **kwarg):
        await obj.__init__(*arg, **kwarg)
        return obj

    def new(cls, *arg, **kwarg):
        obj = __new__(cls, *arg, **kwarg)
        coro = init(obj, *arg, **kwarg)
        return coro

    cls.__new__ = new
    return cls

@asyncinit
class AsyncUser:
    async def __init__(self, id: int):
        self.id = id
        with await cachepool as cache:
            cache.hincr(f"users:{id}", "refcnt")

    async def __delete__(self):
        """Won't work"""
        with await cachepool as cache:
            refcnt = await cache.hincrby(f"users:{self.id}", "refcnt", -1)
            if refcnt == 0:
                # update database

    # rest of the class...

1 个答案:

答案 0 :(得分:2)

不可能同步def python的构建方法,但可以使用loop.create_futureasyncio.ensure_future

在循环外安排协程调用
      @annotation_1
      Method1
      {
       ...
      }

      @annotation_2
      Method2
      {
       ...
      }

      @annotation_1
      Method3
      {
       ...
      }

      Method4
      {
       ...
      }