【问题标题】:Django talking to multiple serversDjango 与多个服务器对话
【发布时间】:2018-01-13 03:50:39
【问题描述】:

那里有很多信息,老实说,这有点难以消化,我有点迷茫。

我的网络应用程序必须执行一些资源密集型任务。现在的标准设置应用程序在服务器静态/媒体上用于托管。我想做的是设置 celery,这样我就可以调用 task.delay 来处理这些资源密集型任务。

  • 我想将整个独立服务器的资源专用于这些资源密集型任务。

问题如下:我如何以这种方式设置 celery,以便从我的主服务器(托管应用程序的地方)对 .delay 的调用从应用程序发送到这些服务器?

注意:这些函数会将数据踢回数据库/影响模型,因此数据完整性在这里很重要。那么,检索到的数据(假设上述情况是可能的......)如何在保持完整性的同时从单独的服务器发送回数据库?

  1. 这可能吗?如果可能,我应该从哪里开始 - 信息过载?
  2. 如果不是,我应该怎么做/我做错了什么?

【问题讨论】:

    标签: python django database celery scheduled-tasks


    【解决方案1】:

    Celery 的重点就是以这种方式工作,即作为分布式任务服务器。您可以在任意数量的机器上启动工作人员,并且代理 - 即 rabbitmq - 将根据需要分发它们。

    不过,我不确定您对数据完整性的要求是什么。数据不会“发回”到数据库; worker 以与 Django 代码的其余部分完全相同的方式直接连接到数据库。

    【讨论】:

    • 权利应该澄清它是“旋转工人......”在不同的机器上我遇到了麻烦。我是否只是将每个特定应用程序/任务的代理设置为指向该服务器?至于数据... cron 作业将运行抓取数据以更新模型,并且抓取的初始数据也将被推迟。我的意思是传递一个模型实例,然后通过 celery 任务调用延迟来更新它,这将是一个问题。
    • 我还是不太清楚你在问什么。您没有特定应用程序的代理;您有一个代理和多个工作人员,但每个工作人员通常都有完整的代码副本并且可以运行任何任务。在数据上,您不应该传递实例,而是传递 ID;您的任务代码将通过 id 从数据库中获取实例,对其进行更新,然后将其保存回来。
    • 感谢您的建议。您是否有指向设置代理和工作人员的参考/教程的链接?从问题中可能很明显/ cmets 不知道我在做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    相关资源
    最近更新 更多