芹菜任务调用终结点.是芹菜还是 django 服务器来完成这项工作?



这是一个通用问题,我寻求答案,因为我在公司代码库中看到了一位前员工提出的芹菜任务。

这是一个共享任务,调用一个终结点,如下所示

@shared_task(time_limit=60*60)
def celery_task_here(some_args):
data = get_data(user, url, server_name)
# some other logic to build csv and stuff
def get_data(user, url, server_name):
client = APIClient()
client.force_authenticate(user=user)
response = client.get(some_url, format='json', SERVER_NAME=server_name)

所有逻辑都驻留在该终结点中。

现在我的理解是,这将使服务器完成所有工作并且不利用芹菜的优势,但是当我在本地运行它时,我确实看到芹菜日志生成查询。我想知道在这种情况下谁在做这项工作,芹菜还是 django 服务器?

如果通过celery_task_here.delay调用任务,任务将被推送到队列中,那么负责处理队列的工作进程将实际执行该任务,它不是"Django 服务器"。工作进程可能与你的 Django 实例在同一台机器上,这取决于你的环境。

如果你通过celery_task_here.s调用任务(或作为普通函数(,任务将由Django 服务器执行。

这取决于任务的调用方式

如果它被调用为具有apply_asyncdelay的芹菜任务,则它由芹菜工人进程作为芹菜任务执行

如果您只是将其称为函数,您仍然可以将其作为普通函数调用而无需将其发送到芹菜

相关内容

  • 没有找到相关文章

最新更新