我用过很多分发任务包,比如
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(持久(基于磁盘)队列的集合),但遗憾的是它不支持多进程访问。
Luigi
包裹。
它允许定义具有所有依赖项的多个任务,然后请求它使用特定参数运行。
它运行所谓的调度程序,可以是本地调度程序,也可以是 Web 服务形式的“生产”调度程序。
Luigi 有一个已完成任务的概念,以某种目标的存在为标志。目标可以是本地文件系统、AWS S3 等上的文件。一旦目标存在,任务就被认为已完成。 Luigi 负责自动创建目标文件,这意味着,文件首先在某个临时位置创建,并在真正完成后移至最终位置。这可以防止目标半完成。
如果中途停止处理,下次启动将检查是否存在已完成的目标,并仅开始处理尚未完成的目标。
无需安装额外的服务,该命令会自行设置本地或“生产”调度程序(如果尚不存在)。
我认为nq可能是适合您的情况的一个很好的解决方案。
这些小型实用程序允许创建非常轻量级的作业队列系统,无需设置、维护、监督或任何长时间运行的流程。
您可以使用命令界面来管理后台任务,唯一的依赖项是文件系统。