pika中的例子写的很差,充满了回调,看的人头痛,既不符合python的开发原则,也不符合tornado的coroutine风格。于是做了一个非常简单的wrapper:
@gen.coroutine
def get_connection(url):
result=[]
def on_open(con):
result.append(con)
def on_error(e):
raise Exception(str(e))
adapters.TornadoConnection(
url,
on_open,
on_error
)
while len(result)==0:
yield gen.sleep(0.01)
raise gen.Return(result[0])
这样,你就可以直接yield
了。感觉直观,简单了很多。