首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >芹菜:为什么在接受任务和开始执行任务之间会有几秒钟的时间间隔?

芹菜:为什么在接受任务和开始执行任务之间会有几秒钟的时间间隔?
EN

Stack Overflow用户
提问于 2019-09-24 16:58:06
回答 1查看 218关注 0票数 2

我有一个芹菜任务:

代码语言:javascript
复制
@app.task(bind=True, soft_time_limit=FreeSWITCHConstants.EXECUTE_ATTEMPTS_LOCAL_SOFT_TIME_LIMIT)
def execute_attempt_local(self, attempt_id, provider_id, **kwargs):
  print "PERF - entering execute_attempt_local"
  ...

它由具有以下配置的(远程) worker处理:

代码语言:javascript
复制
celery -A mycompany.web.taskapp worker n -Q execute_attempts-2 --autoscale=4,60

这个任务一次产生数千个任务,历史上在1-3秒内完成(这是一个主要受I/O限制的任务)。

最近,随着我们的应用程序的总体使用率增加,这项任务的完成时间平均增加到5-8秒,我正在试图了解是什么占用了额外的时间。我注意到,对于许多耗时5-8秒的任务,线程接受任务和执行任务第一行之间的时间约为4s:

代码语言:javascript
复制
[2019-09-24 13:15:16,627: DEBUG/MainProcess] Task accepted: mycompany.ivr.freeswitch.tasks.execute_attempt_local[d7585570-e0c9-4bbf-b3b1-63c8c5cd88cc] pid:7086
...
[2019-09-24 13:15:22,180: WARNING/ForkPoolWorker-60] PERF - entering execute_attempt_local

在那4秒里发生了什么?我假设我有一个芹菜配置问题,并且在某些地方缺乏资源来更快地处理这些任务。你知道是什么让他们慢下来的吗?

EN

回答 1

Stack Overflow用户

发布于 2019-09-24 17:37:41

发生这种情况有几个可能的原因。自动缩放器可能需要一段时间才能启动。因此,根据负载情况,发送任务时可能没有足够的工作进程来运行任务,因此它们会在队列中等待一段时间(甚至可能是几分钟或几个小时),直到有可用的工作进程。

通过查看队列中有多少任务在等待,您可以很容易地监控这一点。如果队列总是空的,这意味着你的任务会被立即执行。如果不是,这意味着您可能想要向集群中添加新的工作进程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58076605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档