Nano Hash - криптовалюты, майнинг, программирование

Несколько сценариев Python-Celery конфликтуют и не выполняются

У меня есть два разных 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.прокси'

Я пытался сослаться на несколько ответов, но ничего не помогло.


Ответы:


1

Проблема, которую вы видите, заключается в том, что сельдерей использует одного и того же «брокера» как в проекте 1, так и в проекте 2. Чтобы одновременно использовать два разных проекта сельдерея, все, что вам нужно сделать, это предоставить им разных брокеров. Вы можете указать брокера с помощью broker_url параметра.

Обычно мы используем Redis в качестве брокера, поэтому очень просто поместить один проект в базу данных Redis 0, а другой проект в базу данных Redis 1. При этом существует множество думая, что обычно речь идет о том, какого брокера использовать, выбор брокера выходит за рамки этого конкретного вопроса.

14.09.2019
  • Так что мне не нужно вручную создавать БД Redis, app.conf.broker_url = 'redis://localhost:6379/0' Это автоматически примет его как БД 0? Я прав? 15.09.2019
  • Это верно. Конфигурация Redis по умолчанию дает вам базы данных 0-15. 15.09.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..