从python2 gevent移动到python3 asyncio

从python2 gevent移动到python3 asyncio,python,python-3.x,python-asyncio,Python,Python 3.x,Python Asyncio,我正在浏览python3 asyncio,它看起来非常棒,因为我来自gevent。然而,我仍在试图弄清楚如何做每件事。假设我正在尝试做一个简单的服务,连接到redis队列并从中弹出项目。事情很快就失控了:当对象被破坏时,我需要一个上下文管理器来关闭redis连接,我需要一个异步redis驱动程序,我需要捕获SIGINT和SIGTERM信号 import asyncio import asyncio_redis class Agent(object): def __init__(self

我正在浏览python3 asyncio,它看起来非常棒,因为我来自gevent。然而,我仍在试图弄清楚如何做每件事。假设我正在尝试做一个简单的服务,连接到redis队列并从中弹出项目。事情很快就失控了:当对象被破坏时,我需要一个上下文管理器来关闭redis连接,我需要一个异步redis驱动程序,我需要捕获SIGINT和SIGTERM信号

import asyncio
import asyncio_redis

class Agent(object):
    def __init__(self, name):
        print("hello, i'm %s" % name)
        self.name = name
        self.running = True

        # self.redis should become an instance of asyncio_redis.Connection

    def shutdown(self):
        self.running = False

    def __enter__(self):
        return self

    def __exit__(self):
        print("%s cleaned up" % name)
        self.redis.close()

    def loop(self):
        print("%s started looping" % name)
        while self.running:
            # msg should get a value from self.redis.brpop(["queue"], 10)
            if msg:
                print "%s recv %s" % (name, msg)
            else:
                pass

if __name__ == "__main__":

    loop = asyncio.get_event_loop()
    try:
        with a as Agent("agent1"):
            loop.add_signal_handler(signal.SIGINT, a.shutdown)
            loop.run_until_complete( a.loop() )
    finally:
        loop.stop()
        loop.close()
有人能完成代码并使其运行吗?谢谢。

一定要看看和

我两个都用过,现在我喜欢aioredis。它有上下文管理器(参见文档中的示例),它们合并了Python3.5语法