Я довольно новичок в Python Tornado и пытаюсь запустить новый поток для выполнения некоторого кода блокировки ввода-вывода, одновременно позволяя серверу продолжать обрабатывать новые запросы. Я немного читал, но все еще не могу понять, в чем разница между этими двумя функциями?
Например, вызывая такой метод:
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
), поскольку к объекту отчета присоединен путь к выходному файлу.
Я еще не совсем применил ни один из этих методов, поэтому они могут быть неверными, но просто искал некоторую справочную информацию.
Приветствия!