我正在查看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()
任何人都可以完成代码并使其运行吗?感谢。
答案 0 :(得分:0)
绝对可以查看aioredis和asyncio-redis。
我已经使用了两者,目前我喜欢aioredis。它有上下文管理器(参见文档中的示例),并且它们结合了Python 3.5语法。