31

我正在使用 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

是否可以将参数传递给函数处理程序。如果没有,是否有任何替代方案?基本上,我需要每个计划的作业返回一个我在创建计划时传入的字符串。谢谢!

4

2 回答 2

35

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

您可以使用:

lambda: printit(sometext)

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

于 2012-09-13T18:42:29.423 回答
33

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

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

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

sched.add_job(printit, "cron", [sometext], second="*/5")
于 2016-08-18T21:28:11.457 回答