如何获得龙卷风对象?

How to get tornado object?

我想用 key

获取龙卷风对象的值

这是我的代码:

beanstalk = beanstalkt.Client(host='host', port=port)
beanstalk.connect()
print("ok1")

beanstalk.watch('contracts')
stateTube = beanstalk.stats_tube('contracts', callback=show)
print("ok2")

ioloop = tornado.ioloop.IOLoop.instance()
ioloop.start()

print("ok3")

这是函数 `show()``

def show(s):
    pprint(s['current-jobs-ready'])
    ioloop.stop

当我查看文档时,我发现了这一点:

当我执行这段代码时,我得到了这个:

ok1
ok2
3

事实上我得到了我想要的结果“3”,但我不明白为什么我的程序继续 运行?为什么 ioloop 不关闭?我在编译时没有 ok3 如何关闭 ioloop 并拥有 ok3?

beanstalk.stats_tube是异步的,它return是一个Future代表一个尚未解决的未来结果

作为 the README says,您的回调 show 将使用包含解析结果的字典执行。所以你可以这样定义 show

def show(stateTube):
    pprint(stateTube['current-job-ready'])

beanstalk.stats_tube('contracts', callback=show)

from tornado.ioloop import IOLoop
IOLoop.current().start()

请注意,您传递的是 show,而不是 show():您传递的是函数本身,而不是调用函数并传递其 return 值。

除了传递回调之外,解决 Future 的另一种方法是在协程中使用它:

from tornado import gen
from tornado.ioloop import IOLoop

@gen.coroutine
def get_stats():
    stateTube = yield beanstalk.stats_tube('contracts')
    pprint(stateTube['current-job-ready'])

loop = IOLoop.current()
loop.spawn_callback(get_stats)
loop.start()