apscheduler вызывает функцию params только один раз - PullRequest
0 голосов
/ 29 января 2019

Я настроил этот базовый пример, чтобы проиллюстрировать точку в теме: https://github.com/agronholm/apscheduler/blob/master/examples/executors/processpool.py

Вот настроенный код (см. Args = [datetime.now ()])

#!/usr/bin/env python

from datetime import datetime
import os

from apscheduler.schedulers.blocking import BlockingScheduler


def tick(param):
    print('Tick! The time is: %s' % param)


if __name__ == '__main__':
    scheduler = BlockingScheduler()
    scheduler.add_executor('processpool')
    scheduler.add_job(tick, 'interval', seconds=3, args=[datetime.now()])
    print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))

    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass

Когда я запускаю его, метка времени вывода не обновляется:

$ ./test.py
Press Ctrl+C to exit
Tick! The time is: 2019-01-28 19:41:53.131599
Tick! The time is: 2019-01-28 19:41:53.131599
Tick! The time is: 2019-01-28 19:41:53.131599

Это ожидаемое поведение?Я использую Python 3.6.7 и apscheduler 3.5.3, спасибо.

1 Ответ

0 голосов
/ 01 февраля 2019

Это не имеет ничего общего с APScheduler.То, что вы делаете, можно переписать так:

args = [datetime.now()]
scheduler.add_job(tick, 'interval', seconds=3, args=args)

Вы звоните datetime.now(), а затем передаете его возвращаемое значение в списке на scheduler.add_job().Поскольку вы передаете дату и время, как вы ожидаете, что APScheduler будет вызывать datetime.now() каждый раз, когда выполняется целевая функция?

...