python-3.x - 为 ThreadPoolExecutor 释放资源
问题描述
我正在尝试使用 threadPoolExcecutor 来实现对 API 请求的异步处理,同时限制服务器上的线程数。我的目标是以异步模式处理繁重的请求,当API收到请求时,submit_request
调用该方法,它应该立即返回一个序列ID,并在后台执行繁重的数据处理,这样它就不会阻塞随后的电话。我将数据传递给通过executor.submit
方法调用的线程函数。我还需要通过指定 max_workers 来限制正在启动的线程数。下面的例子实现了这个目标;但是,executor
通常使用with
上下文管理器调用以释放资源。如果我使用with
executor 关键字,则序列 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
解决方案
推荐阅读
- omnet++ - openflow 1.0 中未声明的信号“NF_NO_MATCH_FOUND”错误
- javascript - 按对象和日期中的值对数组进行排序
- python - 使用括号字符串和多于两行时,Python pep8 关于缩进的警告
- jsp - struts 1.2 - 小写的bean消息显示
- amazon-dynamodb - DynamoDB 中因有条件放置而导致的性能损失
- python - 当我尝试使用“for”循环更改列表的值时,为什么代码不起作用(此处)?
- javascript - 即使条件不成立,map 函数也会返回项目
- c++ - 为 STL 随机数生成器编写工厂方法
- javascript - 是否有一个现代社区可以分享使用 SuiteScript 2.0 的人员的知识和最佳实践?
- c - OpenMP 中的归约操作如何在幕后工作?