Внутри сопрограммы asyncio вы можете использовать любую функцию, если она работает относительно быстро (<0,05 сек.), В противном случае вы рискуете заблокировать цикл обработки событий и получить значительное снижение производительности. </p>
Если функция работает относительно медленно, онавсе еще может использоваться внутри сопрограммы asycnio без побочных эффектов, но только внутри executor .
Если функция возвращается быстро и позже вызывает обратный вызов - это хорошая ситуация.Такая функция / обратный вызов может быть приведена к ожидаемому красивому asyncio с помощью asyncio.Future .
Также обратите внимание, что многие объекты asyncio по умолчанию не являются потокобезопасными.
Короче говоря, я не вижу причины, по которой asyncio нельзя безопасно использовать со сторонней библиотекой, которая использует потоки, если все реализовано правильно.
Но прежде чем переписывать что-либо в большой кодовой базе, вам следуетточно знаю, , почему вам нужен asyncio и, имхо, есть некоторый опыт работы с ним на меньшей кодовой базе.
Попробуйте взять одну функцию на основе обратного вызова и привести ее к сопрограмме с asyncio.Future
,Попробуйте выполнить несколько таких сопрограмм одновременно.Посмотрите, добьетесь ли вы того, чего хотите, и все ли идет гладко.Продолжайте в том же духе.
Оборачивание существующего кода для использования asyncio вместо перезаписи звучит как хорошая идея: вы можете сделать это итеративно и только для используемых вами частей.