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

5
我使用了很多分布式任务包,例如celerypython-rq,它们都依赖于外部服务,例如redisrabbit-mq等等。
但是,通常我不需要一个队列服务,换句话说,不想在我的vps上安装redis或其他非Python服务。(也为了简化环境)
我应该说将生产者工作者拆分为不同的进程(两个代码文件)是很好的。使用multiprocessing.Queue需要将所有内容放入一个文件中,并且需要编写大量额外的代码来捕获ctrl+c以处理退出并保存当前排队的任务。这不会发生在celerypython-rq中,即使停止工作程序和生产者,任务仍然保存在队列中。
我想使用本地队列(只需通过pip install xxx即可工作),例如磁盘队列。经过一番搜索,只找到queuelib(基于磁盘的持久性队列集合),但遗憾的是它不支持从多个进程访问。
2个回答

1

请检查 Luigi软件包。 它允许定义多个任务及其所有依赖项,然后使用特定参数请求运行。

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

Luigi具有已完成任务的概念,通过某种目标的存在来标记。目标可以是本地文件系统上的文件,也可以是AWS S3上的文件等等。一旦目标存在,任务被视为已完成。Luigi负责原子地创建目标文件,这意味着文件首先在某个临时位置创建,然后在真正完成后移动到最终位置。这样可以避免出现未完成的目标。

如果您在处理中间停止,则下一次启动将检查已完成的目标的存在并仅处理尚未完成的目标。

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


0
我认为nq可能是你的情况下的一个好解决方案。
这些小型工具可以创建非常轻量级的作业队列系统,无需设置、维护、监督或任何长时间运行的进程。
你可以使用命令界面来管理后台任务,唯一的依赖是文件系统。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接