Celery:如何将worker和client分成不同的服务器

问题描述 投票:0回答:1

我使用Django作为网络服务器,redis作为经纪人

当Django收到请求时,它会启动一个异步任务,这个任务可能花费10个小时,所以我使用了Celery。

我的目标是:一台服务器,称之为服务器1,运行Django(webapp,将任务发送到redis),另一台服务器,称之为server2,运行工作,实际执行任务。

有人说只是复制服务器2上的所有项目,并启动一个工人。但是网络部分是不必要的。我只想要服务器2上的任务部分。

这是我的Django项目

proj                                                                  
|
---proj
|    |
|    ---celery.py
|
---app
    |
    tasks.py

顺便说一句:你能告诉我如何生成文档架构,真可惜

在tasks.py中,有一个名为do_train()的函数

view.py

class Testcelery(APIView):
def get(self, request, para, format=None):
    r = do_train.delay()
    print(r.id)
    # result = add.delay(4, 4)
    # print(result.id)
    result = OrderedDict()
    result['result'] = r.id
    result['code'] = status.HTTP_200_OK
    result['message'] = 'success'
    return Response(result, status=status.HTTP_200_OK)

所以在redis中发送一个任务。

我在服务器2上启动了一个工作者,但它总是说

KeyError: 'app.tasks.do_train'

服务器2上的纯芹菜项目

proj                                                                  
|
---celery.py
|
---app
    |
    tasks.py
python celery django-celery
1个回答
-1
投票

我相信this answer提供了一个非常好的,深入的解释,你将如何做到这一点。我建议你只需咬住子弹并在两台机器上都有源代码,你只需在settings.py文件中正确配置Redis设置即可。但是,当你要求帮助生成文档架构时,我不确定你的意思。

© www.soinside.com 2019 - 2024. All rights reserved.