多个 Python-Celery 脚本冲突且无法执行



在不同的目录中有两个不同的python脚本,它们有芹菜调度程序。

脚本 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:错误/主进程] 收到类型为"scheduler1.proxy"的未注册任务。 该消息已被忽略并丢弃。

您是否记得导入包含此任务的模块? 或者,也许您正在使用相对导入?

请看 http://docs.celeryq.org/en/latest/internals/protocol.html 了解更多信息。

邮件正文的完整内容是: '[[], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]' (77b( 回溯(最近一次调用(: 文件"/home/PycharmProjects/data_scraping/venv/lib/python3.6/site-packages/celery/worker/consumer/consumer.py",第 559 行,on_task_received 策略 = 策略[type_] KeyError: 'scheduler1.proxy'

我尝试参考多个答案,但没有任何效果。

您看到的问题是芹菜在项目 1 和项目 2 中使用相同的"代理"。 为了同时使用两个不同的芹菜项目,您所要做的就是给他们不同的经纪人。 您可以使用broker_url设置指定代理。

我们通常使用 redis 作为代理,因此将一个项目放在 redis db 0 上,将另一个项目放在 redis db 1 上非常简单。 也就是说,通常有很多想法涉及使用哪个经纪人,而决定经纪人超出了这个特定问题的范围。

相关内容

  • 没有找到相关文章

最新更新