多个PythonCelery脚本冲突,无法执行

2024-04-23 14:59:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在不同的目录中有两个不同的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时,当Scheduler2尝试执行scheduler1的任务时,会出现以下错误:

[2019-09-14 15:10:00127:ERROR/MainProcess]收到类型为“scheduler1.proxy”的未注册任务。 消息已被忽略和丢弃。你知道吗

您是否记得导入包含此任务的模块? 或者你使用的是相对导入?你知道吗

请看 http://docs.celeryq.org/en/latest/internals/protocol.html 更多信息。你知道吗

邮件正文的全部内容是: '[[],{},{“callbacks”:null,“errbacks”:null,“chain”:null,“chord”:null}]'(77b) 回溯(最近一次呼叫): 文件“/home/PycharmProjects/data\u scraping/venv/lib/python3.6/site-packages/芹菜/worker/consumer/消费者.py“,第559行,在收到的任务中” 策略=策略[类型\] KeyError:'scheduler1.proxy'

我试着引用多个答案,但都没用。


Tags: fromimport脚本taskconfnullproxycelery
1条回答
网友
1楼 · 发布于 2024-04-23 14:59:59

您看到的问题是芹菜在项目1和项目2中使用相同的“代理”。为了同时使用两个不同的芹菜项目,你所要做的就是给他们不同的经纪人。可以使用^{} setting指定代理。你知道吗

我们通常使用redis作为代理,因此将一个项目放在redisdb0上,将另一个项目放在redisdb1上非常简单。也就是说,有很多thinking that normally goes into which broker to use,决定一个经纪人不在这个特定问题的范围之内。你知道吗

相关问题 更多 >