Celery:如何将工作者和客户分成不同的服务器

时间:2018-03-06 09:04:25

标签: python celery django-celery

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

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

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

有人说只需复制服务器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

1 个答案:

答案 0 :(得分:-1)

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