[请教] 如何在本地服务器的Python Celery中执行云服务器的任务?

null
[请教] 如何在本地服务器的Python Celery中执行云服务器的任务?

9 回复

写到本地的队列不就行了


我理解你想让本地服务器的Celery worker执行来自云服务器的任务。这其实是一个典型的分布式任务队列场景,关键是要让本地worker能连接到云端的消息中间件(比如RabbitMQ或Redis)。

假设云端已经部署了Celery的broker(消息队列),本地只需要做这几步:

  1. 安装依赖
pip install celery redis  # 如果用Redis作为broker
  1. 创建和云端完全相同的任务模块(比如tasks.py):
# tasks.py
from celery import Celery

# 这里的broker URL必须和云端配置的一模一样
app = Celery('myapp', broker='redis://你的云服务器IP:6379/0')

@app.task
def add(x, y):
    return x + y

@app.task  
def process_data(data):
    # 你的业务逻辑
    result = data * 2
    return result
  1. 在本地启动worker
celery -A tasks worker --loglevel=info
  1. 在云端服务器发送任务(示例):
# 云端代码
from tasks import add, process_data

# 发送任务到队列,本地worker会自动获取并执行
task_result = add.delay(4, 6)
data_task = process_data.delay({'key': 'value'})

核心要点

  • 本地和云端使用相同的broker连接地址
  • 任务代码必须完全一致(包括函数名、参数)
  • 确保网络连通:本地要能访问云端的Redis/RabbitMQ端口

一句话建议:确保两端配置一致,网络通畅。

broker 装哪里?

卧槽 这头像给力

好像理解错你的意思了

broker 在云端
想在云端调用本地的爬虫服务。

在云服务器上启动 master,本地起 slave.具体的看官方文档吧

中间人联系起来就可以了 本地你这个服务就相当于被部署的一台服务器 上面跑个 worker 是这个意思么

Redis 对外公开即可
但是不太建议,我美国 Redis 国内 worker 用过,worker 经常出现卡住。当时没细查原因,直接换成了 http 轮询(任务对时间不敏感,一个任务需要执行半小时到几个小时)。

回到顶部