Я получил ошибку при использовании apscheduler с магазинами заданий mongodb на основе торнадо

# get function like this:
@gen.coroutine
def get(self, url=None):
    if not url:
        url = "https://www.baidu.com/"
    res = yield self.client.fetch(url)
    raise gen.Return(res.body)

# add_job method:
self.sdu.add_job(
    tornado.ioloop.IOLoop.instance().add_callback,
    'interval',
    seconds=delta_time,
    args=[get],
)

Я запускаю apscheduler в приложении Tornado:

self.sdu = scheduler.SchedulerWrapper()  
self.sdu.start()

и журнал ошибок: ValueError:

Это задание не может быть сериализовано, так как не удалось определить ссылку на его вызываемый объект (>). Вместо этого рассмотрите возможность предоставления текстовой ссылки (модуль:имя функции).

не знаю как решить эту проблему, прошу помощи


person lizx    schedule 01.07.2016    source источник


Ответы (1)


Вы пытаетесь добавить связанный метод в качестве целевой функции задания. Это не будет работать с постоянным хранилищем заданий. Вместо этого создайте новую функцию в качестве цели, которая затем получит глобальный IOLoop и запустит сопрограмму.

person Alex Grönholm    schedule 01.07.2016
comment
self.sdu.add_job( self.job_runner, "interval", id=job_id, args=["job_id", "url"], # kwargs={"job_id": job_id, "url": url}, **schedule_keywords ) вот так пишу, а все равно не работает - person lizx; 03.07.2016