tornado PeriodicCallback:提供带参数的回调?

tim*_*irg 5 python tornado

函数tornado.ioloop.PeriodicCallback(callback, callback_time, io_loop=None)说我无法为我的callback函数添加参数,但是如果我真的需要callback用参数调用呢?有工作吗?

A. *_*vis 10

是的,使用lambda或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()
Run Code Online (Sandbox Code Playgroud)

在此示例中,如果更改x或y,则更改将反映在下一次调用"my_function"中.另一方面,如果你"导入functools"并且:

periodic_callback = PeriodicCallback(
    functools.partial(my_function, x, y),
    10)
Run Code Online (Sandbox Code Playgroud)

然后稍后更改为x和y的值将不会出现在"my_function"中.最后,你可以这样做:

def my_partial():
    my_function(x, y)

periodic_callback = PeriodicCallback(
    my_partial,
    10)
Run Code Online (Sandbox Code Playgroud)

这与前面的"lambda"表达式相同.