如何获得龙卷风对象?
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()
我想用 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()