gpt4 book ai didi

python - IOLoop.current().run_in_executor() 和 ThreadPoolExecutor().submit() 的区别

转载 作者:行者123 更新时间:2023-12-03 21:17:53 25 4
gpt4 key购买 nike

我对 Python Tornado 很陌生,并且一直在尝试启动一个新线程来运行一些 IO 阻塞代码,同时允许服务器继续处理新请求。我一直在阅读,但似乎仍然无法弄清楚这两个功能之间有什么区别?

例如调用这样的方法:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(1) as executor:
future = executor.submit(report.write_gresb_workbook)
print(future.result())

相比:
from concurrent.futures import ThreadPoolExecutor
from tornado import ioloop

with ThreadPoolExecutor(1) as executor:
my_success = await ioloop.IOLoop.current().run_in_executor(executor, report.write_gresb_workbook)
print(my_success)

write_gresb_workbook 从对象报告中获取一些信息并将其写入 excel 电子表格(但是我使用的是 openpyxl,它需要大约 20 秒来加载适当格式的工作簿,另外大约需要 20 秒来保存它,这会阻止服务器处理新请求!)

该函数仅返回 True 或 False( my_success 是什么),因为报表对象具有附加到它的输出文件的路径。

我还没有完全让这些方法起作用,所以它们可能不正确,但只是在寻找一些背景信息。

干杯!

最佳答案

IOLoop.run_in_executorExecutor.submit本质上做同样的事情,但返回不同的类型。 IOLoop.run_in_executor返回 asyncio.Future , 而 Executor.submit返回 concurrent.futures.Future .

两个Future类型具有几乎相同的接口(interface),但有一个重要区别:只有 asyncio.Future可与 await 一起使用在协程中。 run_in_executor的目的|是提供这种转换。

关于python - IOLoop.current().run_in_executor() 和 ThreadPoolExecutor().submit() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58410410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com