- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有 celery 的 Django 项目
由于 RAM 限制,我只能运行两个工作进程。
我的任务既有“慢”又有“快”。快速任务应尽快执行。短时间内(0.1 秒 - 3 秒)可能有许多快速任务,因此理想情况下两个 CPU 都应该处理它们。
慢速任务可能会运行几分钟,但结果可能会延迟。
慢任务出现的频率较低,但可能会出现 2 或 3 个任务同时排队的情况。
我的想法是拥有一个:
celery 默认情况下的任务预取乘数 ( https://docs.celeryproject.org/en/latest/userguide/configuration.html#worker-prefetch-multiplier ) 为 4,这意味着 4 个快速任务可以在慢速任务后面排队,并且可能会延迟几分钟。因此我想禁用工作线程 W2 的预取。该文档指出:
To disable prefetching, set worker_prefetch_multiplier to 1. Changing that setting to 0 will allow the worker to keep consuming as many messages as it wants.
但是我观察到,当 prefetch_multiplier 为 1 时,会预取一个任务,并且仍然会被慢速任务延迟。
这是一个文档错误吗?这是一个实现错误吗?或者我误解了文档?有什么办法可以实现我想要的吗?
我执行来启动工作程序的命令是:
celery -A miniclry worker --concurrency=1 -n w2 -Q=fast,slow --prefetch-multiplier 0
celery -A miniclry worker --concurrency=1 -n w1 -Q=fast
我的 celery 设置是默认设置,除了:
CELERY_BROKER_URL = "pyamqp://*****@localhost:5672/mini"
CELERY_TASK_ROUTES = {
'app1.tasks.task_fast': {"queue": "fast"},
'app1.tasks.task_slow': {"queue": "slow"},
}
我的 django 项目的 celery.py 文件是:
from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'miniclry.settings')
app = Celery("miniclry", backend="rpc", broker="pyamqp://")
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
我的django项目的__init__.py
是
from .celery import app as celery_app
__all__ = ('celery_app',)
我的 worker 的代码
import time, logging
from celery import shared_task
from miniclry.celery import app as celery_app
logger = logging.getLogger(__name__)
@shared_task
def task_fast(delay=0.1):
logger.warning("fast in")
time.sleep(delay)
logger.warning("fast out")
@shared_task
def task_slow(delay=30):
logger.warning("slow in")
time.sleep(delay)
logger.warning("slow out")
如果我从管理 shell 执行以下操作,我会发现该快速任务仅在慢速任务完成后才会执行。
from app1.tasks import task_fast, task_slow
task_slow.delay()
for i in range(30):
task_fast.delay()
有人可以帮忙吗?
如果认为有帮助,我可以发布整个测试项目。只是建议推荐的交换此类项目的方式
版本信息:
最佳答案
我确认了这个问题,this中有一个错误文档部分。 worker_prefetch_multiplier = 1
顾名思义,将worker的预取设置为1,意味着worker除了当前正在执行的任务之外,还会多持有一项任务。
要真正禁用预取,您还需要使用 task_acks_late = True
以及预取设置,请参阅 this文档部分
关于python - django + celery : disable prefetch for one worker, 有错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58290045/
我有两个模型诊所和 ClinicCredits:我想要一份带有可用余额的诊所列表问题是,如果我使用注释,我必须使用 ClinicCredits 的查询集循环获取可用的平衡: class Clinic(
我有两个模型诊所和 ClinicCredits:我想要一份带有可用余额的诊所列表问题是,如果我使用注释,我必须使用 ClinicCredits 的查询集循环获取可用的平衡: class Clinic(
在 Java 中,是否存在与 GNU C 扩展 prefetch 和 align(64) 等函数等效的功能,即缓存行对齐? 最佳答案 据我所知,这不是因为它在按需编译系统中没有意义。对于 Java,运
我正在尝试返回,对于每个 UserProfile,它具有一对多 Subscription,它具有两个 Artist 的外键> 和 UserProfile,每个艺术家有许多 ReleaseGroup,c
我正在使用 django 1.7.1 并尝试按照 docs 使用 Prefetch 对象 但是我收到一个名称错误 global name 'Prefetch' is not defined . 我的查
我刚看完 https://developers.google.com/web/updates/2018/07/nostate-prefetch ,它是关于预渲染资源的 nostate 预取。我对这条线
为了缩短页面加载时间,我想对外部 javascript 使用 dns-prefetch 和 preconnect。 如果资源(在我的例子中是外部 javascript)已经在浏览器缓存中会怎样?
场景: 我有一个生产者和消费者,只有一个传输消息的队列。消费者将根据已消费它的消息更新 DB 上的值。不应将任何操作并行发送到数据库。所以,我们不应该做任何导致数据库数据并发的事情。我用 prefet
documentation显示如何将 Prefetch() 对象保存在变量中: >>> prefetch = Prefetch('choice_set', queryset=voted_choices
在查询具有多个 m2m 关系的模型时,我正在使用 prefetch_related: qs = context.mymodel_set.prefetch_related('things1', 'thi
让我们看一下 django 文档中的披萨和浇头模型示例。一个披萨可能有多种配料。 如果我们进行查询: pizzas = Pizza.objects.prefetch_related('toppings
我有一个模型 test带两个平方米 字段:foo和 bar . 我正在尝试注释这些相关字段的条件计数,即计算满足特定条件的相关对象。在查询集之外检索此信息不是一种选择,因为我需要使用带注释的字段来对结
我已将我的训练数据分成多个 tf-record 文件,并使用以下代码读取它们: SHUFFLE_BUFFER = 64 PREFETCH = 256 dataset = tf.data.TFRecor
我想使用预取,但我不能让它工作! 这是我的代码: function initAutocompletion() { $("input[data-autocomplete-prefetch-url
PREFETCHNTA 指令基本上用于通过预取器将数据从主存带到缓存,但带有 NT 后缀的指令已知会跳过缓存并避免缓存污染。 那么,PREFETCHNTA 执行的操作与 PREFETCH 指令有何不同
我一直在使用带有脚本标签的 defer 属性,但刚刚发现 对比 最佳答案 它们是两种截然不同的东西。 向浏览器指示将需要某些资源(不一定是 JavaScript)。如果您通过 JavaScript
realize() 和 prefetch() 到底是什么意思? 对于音频文件: InputStream is = getClass().getResourceAsStream("/SMS.mp3");
我想出了以下查询: context['user_artists'] = Artist.objects.filter(users=current_user).all() 再加上模板中的以下用法: {%
这对某些人来说可能是个简单的问题,但我无法弄清楚如何为 SDWebImagePrefetcher 应用 options 属性。 到目前为止,我已将其设置为使用完成 block 获取一些 url SDW
Intel 提供了预取编译指示,很有帮助;例如 #pragma prefetch a for(i=0; i
我是一名优秀的程序员,十分优秀!