生产者和工作人员(python)有任何本地任务队列(可能是磁盘队列或内存队列?)?

问题描述 投票:0回答:2

我用过很多分发任务包,比如

celery
python-rq
,它们都依赖于外部服务,比如
redis
rabbit-mq
等等。

但是,通常我不需要

queue service
,换句话说,不想在我的vps上安装
redis
或其他非python服务。(也是为了简化环境)

我应该说,将

producer
worker
拆分到不同的进程(两个代码文件)是很好的。使用
multiprocessing.Queue
需要将所有内容放入一个文件中,并且需要编写大量额外代码来捕获
ctrl+c
来处理
exit
并保存当前排队的任务。使用
celery
python-rq
就不会发生这种情况,尽管停止了工人和生产者,任务仍然保存在队列中。

我想使用本地队列(可以通过

pip install xxx
工作),例如磁盘队列。 经过一番搜索,只找到了queuelib(持久(基于磁盘)队列的集合),但遗憾的是它不支持多进程访问。

python multithreading queue task
2个回答
1
投票

检查

Luigi
包裹。 它允许定义具有所有依赖项的多个任务,然后请求它使用特定参数运行。

它运行所谓的调度程序,可以是本地调度程序,也可以是 Web 服务形式的“生产”调度程序。

Luigi 有一个已完成任务的概念,以某种目标的存在为标志。目标可以是本地文件系统、AWS S3 等上的文件。一旦目标存在,任务就被认为已完成。 Luigi 负责自动创建目标文件,这意味着,文件首先在某个临时位置创建,并在真正完成后移至最终位置。这可以防止目标半完成。

如果中途停止处理,下次启动将检查是否存在已完成的目标,并仅开始处理尚未完成的目标。

无需安装额外的服务,该命令会自行设置本地或“生产”调度程序(如果尚不存在)。


0
投票

我认为nq可能是适合您的情况的一个很好的解决方案。

这些小型实用程序允许创建非常轻量级的作业队列系统,无需设置、维护、监督或任何长时间运行的流程。

您可以使用命令界面来管理后台任务,唯一的依赖项是文件系统。

© www.soinside.com 2019 - 2024. All rights reserved.