在函数中间我希望能够触发对DB的调用(刻录结果),但该函数继续运行,这样我就不会遇到 I / O瓶颈。这是不一个Web应用程序。所有人都离线了。
用于解释性目的的代码段
a = list(range(100))
for i in a:
my_output = very_long_function(i)
# I'd like to_sql to run in a "fire-and-forget fashion"
function_of_choice_to_sql(my_output)
我想知道我是否更适合使用线程库, asyncio 或其他工具。我没有成功地完成这项特殊的努力。我会采取任何有效的解决方案。
任何帮助?
ps: 并发/锁定之类的问题就好了,因为在我的情况下,我的函数计算所需的时间远远大于要写的数据库。
答案 0 :(得分:2)
您可以使用ThreadPoolExecutor,它提供了一个简单的界面来将callable安排到工作池。特别是,您可能对map方法感兴趣:
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=4) as executor:
# Lazy map (python3 only)
outputs = map(very_long_function, range(10))
# Asynchronous map
results = executor.map(function_of_choice_to_sql, outputs)
# Wait for the results
print(list(results))