Этот поток объясняет, что циклы импорта можно прервать, поместив операторы импорта в конец файла .py или ограничив область импорта.Тем не менее, это кажется очень плохим способом решения проблемы, в основном потому, что он, скорее всего, будет не поддерживаемым (особенно с помощью метода scope).
Как человек, который только что обнаружил asyncio, мне было интересно, было лиспособ использовать его для работы с циклами импорта, и что более важно, если это даже хорошая идея.Например, импорт модуля может быть ожидаемой задачей, которая завершается, когда модуль готов, т.е. когда все необходимые атрибуты определены.
Например:
breakfast.py
cupboard.py
eggs
├── __init__.py
├── yolk.py
└── white.py
breakfast
начинается с import eggs
, а затем определяет класс ScrambledEggs
.cupboard
импортирует breakfast
и определяет два класса: Pan
и Plate
, оба из которых используют breakfast.ScrambledEggs
.__init__.py
импортирует yolk
и white
, оба из которых импортируют Pan
из cupboard
для определения методов приготовления.Однако при импорте cupboard
определение класса Pan
пытается использовать breakfast.ScrambledEggs
, который еще не определен.Это приводит к ошибке.
Кстати, я знаю, что этот пример не имеет особого смысла, но это единственное, о чем я могу думать, быть голодным как собака в 9 часов утра,Взаимодействия между модулями были бы совершенно другими, если бы это была настоящая программа, но для примера, пожалуйста, предположим, что для импорта обязательно, чтобы он был таким, как в этой программе.
В любом случае, мойИдея решения этой проблемы состояла бы в том, чтобы определить импорт в breakfast.py
как асинхронные задачи и запустить их все сразу.Затем я бы сделал определение ScrambledEggs
ожидаемой задачей, для которой cupboard
пришлось бы ждать, пока не будет использовано ScrambledEggs
в его собственном коде (т. Е. Определены Pan
и Plate
).Аналогичным образом, yolk
и white
могут подождать, пока cupboard
определит Pan
, прежде чем приступить к использованию класса.
Возможны ли такие вещи?Есть ли лучшее решение?Или я полностью неправильно понимаю использование и смысл асинхронных задач в Python?Извините, если это глупый вопрос.