首页 > 解决方案 > 为 ThreadPoolExecutor 释放资源

问题描述

我正在尝试使用 threadPoolExcecutor 来实现对 API 请求的异步处理,同时限制服务器上的线程数。我的目标是以异步模式处理繁重的请求,当API收到请求时,submit_request调用该方法,它应该立即返回一个序列ID,并在后台执行繁重的数据处理,这样它就不会阻塞随后的电话。我将数据传递给通过executor.submit方法调用的线程函数。我还需要通过指定 max_workers 来限制正在启动的线程数。下面的例子实现了这个目标;但是,executor通常使用with上下文管理器调用以释放资源。如果我使用withexecutor 关键字,则序列 ID 不会立即返回,这违背了目的。如果b.result()在调用行之后使用提交,那么对 API 的调用将再次变为阻塞和同步。我的问题是,就释放资源而言,这种调用是否足够好,或者我需要以某种方式.result()with上下文管理器?那么如何在不释放资源的情况下安全地实现异步调用并限制启动的线程数呢?谢谢

import concurrent.futures
def threadFunc(request):
    print("do some heavy work here!!")

class process_request():
    def __init__(self):
        self._current_sequence_id = 0
        self._executor = ThreadPoolExecutor(max_workers=2)

    def submit_request(self, data):
        self._current_sequence_id += 1
        print("Processing request")            
        b = self._executor.submit(threadFunc, data)
        return self._current_sequence_id

标签: python-3.xthreadpool

解决方案


推荐阅读