龙卷风PeriodicCallback: 是否提供带参数的回调函数?

6

tornado.ioloop.PeriodicCallback(callback, callback_time, io_loop=None) 函数说我不能为我的 callback 函数添加参数,但如果我确实需要用参数调用 callback 函数该怎么办?有什么解决办法吗?

1个回答

13

是的,可以使用lambda或functools.partial。functools.partial函数的文档在这里

from tornado import ioloop

def my_function(a, b):
    print a, b

x = 1
y = 2 

periodic_callback = PeriodicCallback(
    lambda: my_function(x, y),
    10)

ioloop.IOLoop.current().start()

在这个例子中,如果你改变了x或y的值,在下一次调用“my_function”时这个改变将会被体现出来。另一方面,如果你“import functools”并且:
periodic_callback = PeriodicCallback(
    functools.partial(my_function, x, y),
    10)

接下来对x和y的值进行更改将不会在“my_function”中显示。最后,您可以直接执行:

def my_partial():
    my_function(x, y)

periodic_callback = PeriodicCallback(
    my_partial,
    10)

这与之前的“lambda”表达式的行为相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接