Python 将参数传递给apscheduler处理程序函数

Python 将参数传递给apscheduler处理程序函数,python,Python,我正在使用apscheduler,并尝试将参数传递给启动计划作业时调用的处理程序函数: from apscheduler.scheduler import Scheduler import time def printit(sometext): print "this happens every 5 seconds" print sometext sched = Scheduler() sched.start() sometext = "this is a passed m

我正在使用apscheduler,并尝试将参数传递给启动计划作业时调用的处理程序函数:

from apscheduler.scheduler import Scheduler
import time

def printit(sometext):
    print "this happens every 5 seconds"
    print sometext

sched = Scheduler()
sched.start()

sometext = "this is a passed message"
sched.add_cron_job(printit(sometext), second="*/5")

while True:
    time.sleep(1)
这样做会导致以下错误:

TypeError: func must be callable
是否可以将参数传递到函数处理程序中。如果没有,还有其他选择吗?基本上,我需要每个计划作业返回一个字符串,在创建计划时传入该字符串。谢谢

printit(sometext)
不是可调用的,它是调用的结果

您可以使用:

lambda: printit(sometext)

这是一个可以稍后调用的函数,它可能会执行您想要的操作。

由于这是我在遇到相同问题时发现的第一个结果,因此我添加了一个更新的答案:

根据当前apscheduler(v3.3.0)的配置,您可以在
add_job()
函数中传递函数参数

因此,在OP的情况下,它将是:

sched.add_job(printit, "cron", [sometext], second="*/5")

真是太好了!你认为你能很快解释为什么会这样做/如何修复错误吗?谢谢这是解释。您需要传递一个函数,即可以调用的东西。def foo():pass“foo”是函数“foo()”是调用该函数的返回值。@still.Learning Python支持在运行时使用名为“lambda”的构造创建匿名函数(即未绑定到名称的函数)。这是一个普通函数->定义f(h):返回h10,这是一个lambda函数->g=lambda h:h10,注意区别;)如果使用命名参数,则应该在作业函数参数前面加上arg。示例:args=[arg1,arg2]什么是
,而True:time.sleep(1)