Не работает сериализация заданий Apscheduler

Мы настраиваем планировщик на основе Apscheduler, проблема в том, что мы не можем сериализовать задания.

Вот структура того, что мы хотим.

A Class Base, with its method, this is the class to be run

class Base(object):
    def __init__(self, bim):
      self.b = bim
      pass

    def print_some(self):
      print "Some bout to go down"

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

from base import Base
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
import logging

logging.basicConfig()

jobstores = {'default': SQLAlchemyJobStore(url='url_to_DB')}

class BS(object):
    def __init__(self):
       self.scheduler = BackgroundScheduler()
       self.scheduler.configure(jobstores=jobstores)
       self.scheduler.start()
       self.base = Base()


    def print_some(self):
       print "ngnf"

    def add_job(self):
       self.scheduler.add_job(Base.print_some, 'interval', minutes=1)


BS().add_job()

Но когда я запускаю код, у меня возникает проблема с передачей аргумента конструктору

ERROR:apscheduler.executors.default:Job "Base.print_some (trigger: interval[0:00:01], next run at: 2016-05-24 18:16:27 CEST)" raised an exception
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/apscheduler/executors/base.py", line 112, in run_job
retval = job.func(*job.args, **job.kwargs)
TypeError: unbound method print_some() must be called with Base instance as first argument (got nothing instead)

Я пробовал это

self.scheduler.add_job(Base.print_some, 'interval', args=[Base()], kwargs=dict(self=Base()), seconds=1)

и это

self.scheduler.add_job(Base.print_some, 'interval', args=[self.base], kwargs=dict(self.base), seconds=1)

Никто из них не работал.

Что я упускаю или должен делать ?

1 ответ

  1. Второй пример не может работать, так как у вас есть конфликтующие позиционные и ключевые аргументы. Третий, я предполагаю, не работает с self.база не является итерацией.
    Вы пробовали передавать экземпляр только в качестве позиционного аргумента?