Если вам нужны асинхронные функции, которые правильно работают с Excel, а не просто записывает значения обратно в Excel с помощью COM позже, вам следует использовать асинхронные функции Excel или функции RTD (данные в реальном времени).AFAIK, xlwings не использует ни один из них.
Асинхронные функции Excel отличаются от использования фонового потока для последующей записи результата в Excel.Они выполняются во время цикла вычислений Excel, но позволяют одновременно выполнять вычисления, чтобы другие вычисления не блокировались, например, при одном ожидании ввода-вывода.
Если у вас есть функция длительного выполнения и вы не хотите иметьчтобы дождаться его возвращения, лучше использовать функцию RTD, которая обновляется один раз, когда результат готов.
PyXLL поддерживает как асинхронные, так и функции RTD (https://www.pyxll.com).
https://www.pyxll.com/docs/userguide/udfs.html#asynchronous-functions https://www.pyxll.com/docs/userguide/rtd.html
Еще один вариант - использовать поточно-ориентированные функции, которые запускаются в пуле фоновых потоков в Excel. Если у вас есть функции, которые могут выполняться одновременно (то есть они освобождают GILдля задач ввода-вывода или загрузки процессора), тогда это простой способ повысить производительность ваших листов.
Чтобы пометить функцию как поточно-ориентированную в PyXLL, вы просто указываете "thread_safe = True" при регистрации функцииНапример:
from pyxll import xl_func
@xl_func(thread_safe=True)
def my_thread_safe_function():
pass