如何获得龙卷风目标?

2024-04-26 13:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用键得到龙卷风物体的值

这是我的密码:

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

当我查看文档时发现: enter image description here

当我执行这个代码时,我有:

ok1
ok2
3

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


Tags: clienthost密码portshow物体printbeanstalk
1条回答
网友
1楼 · 发布于 2024-04-26 13:28:17

beanstalk.stats_tube是异步的,它返回一个Future,表示尚未解析的未来结果。你知道吗

作为the README says,回调show将使用包含解析结果的dict执行。所以你可以这样定义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():您传递的是函数本身,而不是调用函数并传递其返回值。你知道吗

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

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()

相关问题 更多 >