我的任务需要~30GiB的磁盘空间。 Celery集群(Redis用作代理)在具有~600GiB磁盘空间的机器上运行。我想以某种方式配置Celery,因此最多10个这样的任务可以在单个节点上运行。这有可能吗?
答案 0 :(得分:0)
您要的(任务+基于硬件的资源管理)是什么,Celery本身不支持,但是实现您自己的并不难。
对于资源分配,您可以实现分布式预留(例如zookeeper或redis + expiring密钥),但是由于您使用的是本地文件系统,因此可以简单地使用该文件系统。例如:py-filelock,并为每个资源块维护一个锁定文件。这很简单;尽管您可能需要基于PID的清理过程,以防您的过程意外终止(例如kill -9
等),并且无法释放锁定。不过,仍然需要相对较少的代码行。
对于Celery,一旦有了资源预订系统,就可以使用Reject + requeue。如果您无法预留空间,请使用此选项来防止空闲的工人接受作业。
也:预取-您应该禁用此功能(将其设置为1,以避免工作人员“ ho积”任务): http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-worker_prefetch_multiplier