【问题标题】:Any local task queue(maybe disk queue or mem queue?) for producer and worker(python)?生产者和工作者(python)的任何本地任务队列(可能是磁盘队列或内存队列?)?
【发布时间】:2016-01-18 09:03:34
【问题描述】:

我用过很多分发任务包,比如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),可惜不支持多进程访问。

【问题讨论】:

    标签: python multithreading queue task


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多