在luigi中使用multiprocessing.Queue

时间:2018-08-15 17:32:02

标签: python resources queue multiprocessing luigi

我在luigi中有一组任务,所有这些任务都需要访问数据库。如果它们位于不同的端口上,那么我最多可以有8个任务同时访问我的数据库(我有允许的端口列表)。 我应该如何最好地实施这一限制,该限制似乎与标准的工作人员限制类似,即,对于我来说,应该在工作人员空闲且数据库端口免费时运行任务。

我尝试在multiprocessing.Queue()中创建一个__main__并将其传递给WrapperTask,后者将其作为luigi.Parameter()接收,但这会导致错误并挂起

UserWarning: Parameter "queue" with value <multiprocessing.queues.Queue object at 0x00000000149E4518>" is not of type string.
warnings.warn('Parameter "{}" with value "{}" is not of type string.'.format(param_name, param_value))

想法是,如果队列为空,则.get()调用将挂起Task,然后再次执行另一个任务.put(port)

这是怎么回事?还是我采用完全错误的方法来管理luigi中的资源?

1 个答案:

答案 0 :(得分:0)

您应该使用Luigi Configuration中的“资源”部分。这将确保不超过这个数目的工人共享全球资源。在https://luigi.readthedocs.io/en/stable/configuration.html#resources中找到更多信息。