当前位置: 首页 > 知识库问答 >
问题:

您应该在哪里更新芹菜设置?在远程工作者或发件人上?

公西财
2023-03-14

应该在哪里更新芹菜设置?远程工作者还是发送者?

例如,我有一个使用Django和Celery的API。API通过代理(RabbitMQ)将远程作业发送给我的远程工作者。工作人员正在运行python脚本(不使用Django),有时这些工作会产生子任务。

我已经在两侧(发送者和工作人员)创建了芹菜设置,即它们都需要设置BROKER_URL。但是,假设我想添加设置CELERY_ACKS_LATE = True,我应该将此设置添加到哪一端?每个远程工作者还是发送方 (API)?

API和远程工作者都连接到同一个代理,每个代理的启动方式都不同。API通过Django__init__创建芹菜实例。py和工人通过主管启动芹菜,即芹菜-A任务工人-l信息

共有2个答案

濮阳和泰
2023-03-14

CELERY_ACKS_LATE = True 属于 worker。它描述了工作人员是否应在使用后立即(完成之前)或完成(延迟)后立即将任务标记为“已确认”。这两种方法都有其缺点,我想你知道自己在做什么。

当然,最好为双方提供一个配置文件并使用它。例如,拥有整个项目的公共代码库,并在VCS中更新文件后,部署-重启各方。

但是在这种情况下,使用这个特定的标志,您只能重新启动工作人员。

陆野
2023-03-14

django芹菜设置仅影响在DjangoServer本身上运行的工作程序。

如果您的所有工作人员都是远程工作人员(就像我所做的那样),那么在发送方,您需要做的就是将任务提交到任务队列所需的配置。

所有其他设置都需要在远程工作人员上设置。

对于任务,在发送方,我需要做的就是像这样定义任务签名:

@app.task(name='report_task')
def reportTask(self, link):
    pass

然后在worker端,你需要创建一个新的芹菜app,同名并指向同一个broker对于其他芹菜设置,您需要在远程工作器上声明它们。

并在远程工作器上实现任务逻辑(每个工作器可以有不同的任务逻辑,只要它们具有相同的任务名称和函数参数)

 类似资料:
  • 我使用芹菜独立(不在Django内)。我计划在多台物理机器上运行一种辅助任务类型。该任务执行以下操作 接受XML文档。 转换它。 进行多个数据库读写 我正在使用PostgreSQL,但这同样适用于使用连接的其他存储类型。过去,我使用数据库连接池来避免在每次请求时创建新的数据库连接,或者避免连接打开时间过长。然而,由于每个芹菜工人都在一个单独的过程中运行,我不确定他们实际上如何能够共享游泳池。我是不

  • 我使用的是OS X 10.10。当尝试与我们团队的私有docker注册表通信时,它不断给我这样的错误: 在Ubuntu系统上,可以通过将添加到配置文件中来解决此错误,如下所示: Mac OS是否有类似的配置文件,可以在其中添加选项?

  • 下面这2段代码有区别吗? 我好奇为啥都是生成的,位置还变了。。。 laravel 11

  • 问题内容: 我们有一个Java服务器应用程序,该应用程序可以在许多计算机上运行,​​所有计算机都连接到Internet,其中一些位于防火墙后面。我们需要从一个中央站点远程更新JAR文件和启动脚本,而不会明显中断应用程序本身。 该过程必须无人值守且万无一失(即,由于不及时的互联网中断,我们无法中断应用程序)。 过去,我们使用各种外部脚本和实用程序来处理类似的任务,但是由于它们具有自己的依赖性,因此难

  • 问题内容: 我正在使用OS X 10.10。尝试与我们团队的私有Docker注册中心进行通信时,它一直给我这样的错误: 在Ubuntu系统上,可以通过添加到配置文件中来解决此错误,如下所示: Mac OS是否有类似的配置文件可在其中添加选项? 问题答案: 您必须将其设置为Docker Machine的/ Boot2Docker配置文件: / var / lib / boot2docker / pr

  • 我正在尝试为没有它们的包装提供类型: 我在带有打字稿 2.4.2 的 webpack 中使用 ts-loader,并且在 tsconfig.json 中设置了以下类型根: 我试图模仿: < code>index.d.ts中包含以下内容: 但是错误仍然存在。我做错了什么?我应该把那些自定义的. d.ts文件放在哪里? 和任何其他类型根之间有什么区别?为什么TypeScript会区别对待它们?