将参数传递给apscheduler处理函数

sti*_*ing 19 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)
Run Code Online (Sandbox Code Playgroud)

这样做会给我以下错误:

TypeError: func must be callable
Run Code Online (Sandbox Code Playgroud)

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

Nie*_*iel 18

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

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

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

sched.add_job(printit, "cron", [sometext], second="*/5")
Run Code Online (Sandbox Code Playgroud)

  • 如果执行命名参数,则应在作业函数参数之前加上arg。范例:args = [arg1,arg2] (3认同)
  • 最新链接:https://apscheduler.readthedocs.io/en/3.x/modules/schedulers/base.html#apscheduler.schedulers.base.BaseScheduler.add_job (2认同)

Ali*_*har 17

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

您可以使用:

lambda: printit(sometext)
Run Code Online (Sandbox Code Playgroud)

哪个是稍后调用的可调用函数,可能会执行您想要的操作.