将参数传递给 apscheduler 处理函数

新手上路,请多包涵

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

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

原文由 still.Learning 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 826
2 个回答

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

您可以使用:

 lambda: printit(sometext)

这是一个稍后调用的可调用对象,它可能会做你想做的事。

原文由 Ali Afshar 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

因此,对于 OP,它将是:

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

原文由 Niel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题