2016-01-18 111 views
2

我已经使用了很多分发任务包,如celery,python-rq,它们都依赖于外部服务,如redis,rabbit-mq等。生产者和工人(python)的任何本地任务队列(可能是磁盘队列或mem队列?)?

,但通常我并不需要一个queue service,换句话说,不要安装在我的VPS redis或其他非蟒蛇服务(也简化环境)

我应该说将producerworker分割成不同的过程(两个代码文件)是很好的。使用multiprocessing.Queue需要将所有内容放入一个文件中,并且需要编写大量附加代码来捕获ctrl+c以处理exit并保存当前入队的任务。这不会发生,通过使用celery,python-rq,虽然停止工人和生产者,任务仍然保存在队列中。

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

回答

0

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

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

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

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

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