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

时间:2016-01-18 09:03:35

标签: python multithreading queue task

我使用了很多分发任务包,例如celerypython-rq,它们都依赖于redisrabbit-mq等外部服务。

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

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

我想使用本地队列(只能由pip install xxx工作),例如磁盘队列。 经过一些搜索后,只能找到queuelib(Collection of persistent (disk-based) queues),但遗憾的是它不支持从多个进程进行访问。

1 个答案:

答案 0 :(得分:0)

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

它运行所谓的调度程序,可以是本地调度程序,也可以是"生产"一个以网络服务的形式。

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

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

没有额外的服务要安装,该命令设置本地或"生产"调度程序本身,如果尚不存在。