deferToThread
использует встроенную поддержку потоков Python для запуска функции, переданной ему в отдельном потоке (из пула потоков).
Так что deferToThread
имеет все те же свойства, что и встроенная- в поточном модуле, когда дело доходит до параллелизма.На CPython потоки могут работать параллельно, если только один из них удерживает глобальную блокировку интерпретатора.
Поскольку универсальной причины "блокировки" не существует, универсального решения также не существует.на «блокирование» - так что невозможно сказать, приведет ли deferToThread
к параллельному выполнению или нет вообще.Однако общее практическое правило заключается в том, что если блокировка происходит из-за ввода-вывода, она, вероятно, будет, а если из-за вычислений, вероятно, не будет.
Конечно, если это происходит из-за ввода-вывода, выможет быть лучше использовать другую функцию из Twisted вместо многопоточности.