Celery 任务调用端点。完成这项工作的是芹菜还是 django 服务器?
Celery task calls endpoint. Is it celery or the django server that does the job?
这是一个我寻求答案的一般性问题,因为我在我公司的代码库中看到一位前员工的 celery 任务。
这是一个调用端点的共享任务,例如
@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)
并且所有逻辑都驻留在该端点中。
现在我的理解是,这将使服务器完成所有工作并且不利用 celery 的优势,但是当我在本地 运行 时,我确实看到 celery 日志产生查询。我想知道在这种情况下谁真正在做这项工作,celery 还是 django 服务器?
如果通过celery_task_here.delay
调用任务,任务会被推送到队列中,然后worker负责处理队列的进程会实际执行任务,不是"Django server"。工作进程可能与您的 Django 实例位于同一台机器上,这取决于您的环境。
如果您通过 celery_task_here.s
调用任务(或作为普通函数),任务 将 执行通过 Django 服务器。
这取决于任务是如何调用的
如果它打算用 apply_async
或 delay
作为 celery 任务调用而不是由 celery worker 进程作为 celery 任务执行
如果你只是将其作为函数调用,你仍然可以将其作为普通函数调用,而无需将其发送到 celery
这是一个我寻求答案的一般性问题,因为我在我公司的代码库中看到一位前员工的 celery 任务。
这是一个调用端点的共享任务,例如
@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)
并且所有逻辑都驻留在该端点中。
现在我的理解是,这将使服务器完成所有工作并且不利用 celery 的优势,但是当我在本地 运行 时,我确实看到 celery 日志产生查询。我想知道在这种情况下谁真正在做这项工作,celery 还是 django 服务器?
如果通过celery_task_here.delay
调用任务,任务会被推送到队列中,然后worker负责处理队列的进程会实际执行任务,不是"Django server"。工作进程可能与您的 Django 实例位于同一台机器上,这取决于您的环境。
如果您通过 celery_task_here.s
调用任务(或作为普通函数),任务 将 执行通过 Django 服务器。
这取决于任务是如何调用的
如果它打算用 apply_async
或 delay
作为 celery 任务调用而不是由 celery worker 进程作为 celery 任务执行
如果你只是将其作为函数调用,你仍然可以将其作为普通函数调用,而无需将其发送到 celery