我在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中的资源?
答案 0 :(得分:0)
您应该使用Luigi Configuration中的“资源”部分。这将确保不超过这个数目的工人共享全球资源。在https://luigi.readthedocs.io/en/stable/configuration.html#resources中找到更多信息。