gpt4 book ai didi

python - 如何在 Tornado 中创建多个 add_callback?

转载 作者:行者123 更新时间:2023-11-28 17:47:21 25 4
gpt4 key购买 nike

我正在尝试在 Tornado 主循环中添加多个回调。但是当我运行这段代码时:

def task(num):
print 'task %s' % num

if __name__ == '__main__':
for i in range(1,5):
tornado.ioloop.IOLoop.instance().add_callback(callback=lambda: task(num=i))
tornado.ioloop.IOLoop.instance().start()

我得到了 5 次输出:“任务 5”,而不是任务 1.. 任务 5。当我像这样更改 ma​​in 时:

tornado.ioloop.IOLoop.instance().add_callback(callback=lambda: task(1))
tornado.ioloop.IOLoop.instance().add_callback(callback=lambda: task(2))
tornado.ioloop.IOLoop.instance().add_callback(callback=lambda: task(3))
tornado.ioloop.IOLoop.instance().add_callback(callback=lambda: task(4))

一切正常(我在输出中得到 task1-task5)。在第一种情况下我做错了什么?

最佳答案

也许在JS中存在同样的问题?看看这个答案:JavaScript closure inside loops – simple practical example

“问题在于每个匿名函数中的变量 i 都绑定(bind)到函数外部的同一个变量。”

尝试简单的测试:

def task(num):
print 'task %s' % num

def create_task(num):
tornado.ioloop.IOLoop.instance().add_callback(callback=lambda: task(num))

if __name__ == '__main__':
for i in range(1,5):
create_task(i)
tornado.ioloop.IOLoop.instance().start()

关于python - 如何在 Tornado 中创建多个 add_callback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16129090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com