Подтвердить что ты не робот

Передача параметров в функцию обработчика 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

Можно ли передавать параметры в обработчик функции. Если нет, есть ли альтернативы? В принципе, мне нужно, чтобы каждое запланированное задание возвращало строку, которую я передаю, когда создаю расписание. Спасибо!

4b9b3361

Ответ 1

printit(sometext) не является вызываемым, это результат вызова.

Вы можете использовать:

lambda: printit(sometext)

Что называется вызываемым позже, что, вероятно, сделает то, что вы хотите.

Ответ 2

Так как это первый результат, который я обнаружил при наличии той же самой проблемы, я добавляю обновленный ответ:

В соответствии с docs для текущего apscheduler (v3.3.0) вы можете передать аргументы функции в функции add_job().

Таким образом, в случае OP это будет:

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