我用过很多分布式任务包,如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(Collection of persistent (disk-based) queues),但遗憾的是,它不支持从到多进程的访问。
发布于 2016-01-19 06:50:23
检查Luigi包。它允许定义具有所有依赖项的多个任务,然后请求它使用特定的参数运行。
它运行所谓的调度器,它可以是本地的调度器,也可以是web服务形式的“生产”调度器。
Luigi有一个完成任务的概念,通过某种目标的存在来标记。目标可以是本地文件系统、亚马逊网络服务S3等上的文件。一旦目标存在,则认为任务已完成。Luigi负责自动创建目标文件,这意味着文件首先在某个临时位置创建,并在真正完成后移动到最终文件。这可以防止出现半成品的目标。
如果在中间停止处理,next start将检查是否存在已完成的目标,并仅开始处理那些尚未完成的目标。
没有额外的服务需要安装,该命令会自行设置本地或“生产”调度程序(如果还不存在)。
https://stackoverflow.com/questions/34850786
复制相似问题