小编nvi*_*vie的帖子

如何布局队列/工作线结构以支持多个环境的大型任务?

对于基于Python/Django/Celery的部署工具,我们有以下设置:

  1. 我们目前使用默认的Celery设置.(一个队列+交换称为"芹菜".)
  2. 队列上的每个任务代表一个部署操作.
  3. 环境的每个任务都以可能需要(非常)长的同步阶段结束.

需要满足以下规范:

  1. 并发:多个环境的任务应该同时执行.
  2. 锁定:每个环境最多可以同时运行一个任务(即环境锁定).
  3. 吞吐量优化:当单个环境有多个任务时,可以组合它们的同步阶段以进行优化.因此,如果任务接近其结尾,则应检查队列中是否有新任务在此环境中等待,如果是,则跳过其同步阶段.

实现这个的首选方法是什么?

一些想法:

  • 我想说我们必须设置多个队列:每个环境一个队列,并且N个芹菜工人独自处理一个队列.(这将解决规范1 + 2.)
    但是,我们如何让多个芹菜工人专门听不同的队列?
  • 是否有一种干净的方式可以知道队列中有更多任务在等待环境?

python django celery

12
推荐指数
1
解决办法
1081
查看次数

如何在单元测试中优雅地换出(补丁)Django FileSystemStorage设置?

我遇到了以下问题.我有一个看起来像这样的模型:

class Package(models.Model):
    name = models.CharField(max_length=64)
    file = models.FileField(upload_to="subdir",
                            storage=settings.PACKAGE_STORAGE,
                            null=True)
Run Code Online (Sandbox Code Playgroud)

此示例中必不可少的是构造函数的storage=参数FileField.它充满了一个值settings.py.在以下代码中:

from django.core.files.storage import FileSystemStorage
PACKAGE_STORAGE = FileSystemStorage(location="/var/data", base_url="/")
Run Code Online (Sandbox Code Playgroud)

对于生产用途,这很好.但在我的单元测试中,我现在编写的上传/var/data内容包含生产数据.我试着换出PACKAGE_STOREpackages/tests.py这样的

from django.conf import settings     # This is line 1
from tempfile import mkdtemp
settings.PACKAGE_STORAGE = FileSystemStorage(location=mkdtemp(), base_url="/")

# rest of the imports and testing code below
Run Code Online (Sandbox Code Playgroud)

但真正的问题是,加载测试文件之前,packages应用程序及其模型已经加载,因此,PACKAGE_STORAGE在我能够在测试设置代码中更改之前,设置已经解决.

是否有一种优雅的方法可以在测试环境中覆盖此特定设置?

django settings storage unit-testing patch

4
推荐指数
3
解决办法
1779
查看次数

标签 统计

django ×2

celery ×1

patch ×1

python ×1

settings ×1

storage ×1

unit-testing ×1