APScheduler OCCASIONAL TypeError: невозможно выбрать объекты модуля - PullRequest
0 голосов
/ 27 ноября 2018

Это случайная ошибка.Я не могу воспроизвести это точно.После запуска APScheduler в течение пары часов, это может произойти.Я изменяю исходный код (apscheduler / schedulers / base.py), чтобы получить более подробную информацию:

 989                         job_next_run = job.trigger.get_next_fire_time(run_times[-1], now)
 990                         if job_next_run:
 991                             job._modify(next_run_time=job_next_run)
 992                             try:
 993                                jobstore.update_job(job)
 994                             except Exception as ex:
 995                                print("update_job_error: ", job.__getstate__(), flush=True)
 996                                raise ex
 997                         else:
 998                             self.remove_job(job.id, jobstore_alias)

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

INFO:apscheduler.executors.default:Running job "Executor.execute (trigger: interval[0:00:30], next run at: 2018-11-25 13:08:01 CST)" (scheduled at 2018-11-25 13:07:31.070486+08:00)
update_job_error:  {'version': 1, 'id': '17@IdsAlarmCollecter', 'func': 'engine.core.executor.celery:Executor.execute', 'trigger': <IntervalTrigger (interval=datetime.timedelta(0, 30), start_date='2018-11-23 20
:55:31 CST', timezone='Asia/Shanghai')>, 'executor': 'default', 'args': (<engine.core.executor.celery.Executor object at 0x7f88b4b699e8>, 'IdsAlarmCollecter', 17), 'kwargs': {}, 'name': 'Executor.execute', 'mis
fire_grace_time': 1, 'coalesce': True, 'max_instances': 1, 'next_run_time': datetime.datetime(2018, 11, 25, 13, 8, 1, 75240, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)}
INFO:apscheduler.executors.default:Running job "Executor.execute (trigger: interval[0:00:30], next run at: 2018-11-25 13:08:01 CST)" (scheduled at 2018-11-25 13:07:31.075240+08:00)
INFO:apscheduler.executors.default:Job "Executor.execute (trigger: interval[0:00:30], next run at: 2018-11-25 13:08:01 CST)" executed successfully
INFO:apscheduler.executors.default:Job "Executor.execute (trigger: interval[0:00:30], next run at: 2018-11-25 13:08:01 CST)" executed successfully
Exception in thread APScheduler:
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/opt/work/enginepy3env/lib/python3.6/site-packages/apscheduler/schedulers/blocking.py", line 30, in _main_loop
    wait_seconds = self._process_jobs()
  File "/opt/work/enginepy3env/lib/python3.6/site-packages/apscheduler/schedulers/base.py", line 996, in _process_jobs
    raise ex
  File "/opt/work/enginepy3env/lib/python3.6/site-packages/apscheduler/schedulers/base.py", line 993, in _process_jobs
    jobstore.update_job(job)
  File "/opt/work/enginepy3env/lib/python3.6/site-packages/apscheduler/jobstores/sqlalchemy.py", line 106, in update_job
    'job_state': pickle.dumps(job.__getstate__(), self.pickle_protocol)
TypeError: can't pickle module objects

Это говорит, job.__getstate__() не можетмаринованные свалки.Но последние job.__getstate__(), которые я печатаю в apscheduler / schedulers / base.py: 995, действительно могут быть дампами.И иногда планировщик умирает безо всякой ошибки, кажется, что BackgroundThread пропал или цикл зашел в тупик, я не могу распознать.

Более запутанная вещь - тот же код хорошо работает на другой машине.

...