一旦队列可用,就立即提取物品

ean*_*son 7 python queue multithreading python-2.7

我正在寻找一个可靠的实现,以允许我逐步使用Queue处理项目列表.

我的想法是,我想使用一定数量的工作人员,这些工作人员将通过20多个数据库密集型任务列表并返回结果.我希望Python从五个第一项开始,一旦完成一项任务就开始于队列中的下一个任务.

这就是我目前没有线程的方式.

for key, v in self.sources.iteritems():
    # Do Stuff
Run Code Online (Sandbox Code Playgroud)

我想有一个类似的方法,但可能无需将列表分成五个子组.这样它就会自动获取列表中的下一个项目.目标是确保如果一个数据库正在减慢进程,它将不会对整个应用程序产生负面影响.

Kat*_*iel 5

您可以自己实现,但Python 3已经提供了一个Executor基于线程管理的解决方案,您可以通过安装backported版本在Python 2.x中使用它.

您的代码可能看起来像

with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    future_to_key = {}
    for key, value in sources.items():
        future_to_idday[executor.submit(do_stuff, value)] = key
    for future in concurrent.futures.as_completed(future_to_key):
        key = future_to_key[future]
        result = future.result()
        # process result
Run Code Online (Sandbox Code Playgroud)