将参数传递给apscheduler处理函数

时间:2012-09-13 18:40:53

标签: 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 message"
sched.add_cron_job(printit(sometext), second="*/5")

while True:
    time.sleep(1)

这样做会给我带来以下错误:

TypeError: func must be callable

是否可以将参数传递给函数处理程序。如果没有,有没有其他选择?基本上,我需要每个预定作业返回我在创建计划时传入的字符串。谢谢!

2 个答案:

答案 0 :(得分:16)

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

您可以使用:

lambda: printit(sometext)

以后可以调用哪个可调用,可能会执行您想要的操作。

答案 1 :(得分:15)

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

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

所以在OP的情况下,它将是:

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