【发布时间】:2017-03-11 05:35:44
【问题描述】:
我的问题如下:我有一个multiprocessing.pool.ThreadPool 对象和worker_count 工作人员和一个主要的pqueue,我从中将任务提供给池。
流程如下:有一个主循环,从pqueue获取level级别的项目,并使用apply_async将其提交到池中。处理该项目时,它会生成level + 1 的项目。问题是池接受所有任务并按照提交的顺序处理它们。
更准确地说,正在发生的事情是处理 level 0 项目,每个项目生成 100 个 level 1 项目,这些项目立即从 pqueue 检索并添加到池中,每个 level 1 项目产生 100 个 level 2提交到池中的项目等,并以 BFS 方式处理项目。
我需要告诉池不接受超过 worker_count 的项目,以便有机会从 pqueue 检索更高级别的项目,以便以 DFS 方式处理项目。
我目前的解决方案是:对于每个提交的任务,将 AsyncResult 对象保存在 asyncres_list 列表中,然后在从 pqueue 检索项目之前,我删除已处理的项目(如果有),检查如果asyncres_list 的长度小于每 0.5 秒池中的线程数,这样只会同时处理thread_number 项。
我想知道是否有更简洁的方法来实现此行为,我似乎无法在文档中找到一些参数来限制可以提交到池的最大任务数。
【问题讨论】:
-
如果您可以发布您拥有的代码的Minimal, Complete and Verifiable 示例,可能会有所帮助。处理和回答这样的问题更容易。
-
“将 BFS 更改为 DFS”问题似乎与“限制池的任务队列大小”不同
标签: python multithreading python-3.x threadpool python-multiprocessing