У меня есть два разных python скрипта в разных каталогах с планировщиками celery.
Сценарий 1:
import requests
from celery import Celery
from celery.schedules import crontab
import subprocess
celery = Celery()
celery.conf.enable_utc = False
@celery.task()
def proxy():
response = requests.get(url="XYZ")
proxies = response.text
paid_proxies = open("paid_proxies.txt", "w+")
paid_proxies.write(proxies.strip())
paid_proxies.close()
celery.conf.beat_schedule = {
"proxy-api": {
"task": "scheduler1.proxy",
"schedule": crontab(minute="*/5")
}
}
Команды, которые я использую для его выполнения:
celery beat -A scheduler1.celery
celery worker -A scheduler1.celery
Сценарий 2:
from celery import Celery
from celery.schedules import crontab
import subprocess
celery = Celery()
celery.conf.enable_utc = False
@celery.task()
def daily():
subprocess.run(["python3", "cross_validation.py"])
celery.conf.beat_schedule = {
"daily-scraper": {
"task": "scheduler2.daily",
"schedule": crontab(day_of_week="*", hour=15, minute=23)
}
}
Команды, которые я использую для его выполнения:
celery beat -A scheduler2.celery
celery worker -A scheduler2.celery
Проблема в том, что когда я запускаю скрипт 1, он работает отлично. Но когда я пытаюсь выполнить сценарий 2, я получаю эту ошибку, поскольку планировщик 2 пытается выполнить задачи планировщика 1:
[2019-09-14 15:10:00,127: ERROR/MainProcess] Получено незарегистрированное задание типа «scheduler1.proxy». Сообщение было проигнорировано и удалено.
Вы не забыли импортировать модуль, содержащий эту задачу? Или, может быть, вы используете относительный импорт?
См. http://docs.celeryq.org/en/latest/internals/protocol.html для получения дополнительной информации.
Полное содержание тела сообщения: '[[], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]' (77b) Traceback (большинство последний последний вызов): Файл "/home/PycharmProjects/data_scraping/venv/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", строка 559, в on_task_received Strategy = Strategy[type_] KeyError: 'планировщик1.прокси'
Я пытался сослаться на несколько ответов, но ничего не помогло.