异步导入模块以处理导入循环吗?

时间:2018-10-18 16:17:33

标签: python asynchronous python-import python-asyncio

This thread解释说,可以通过将导入语句放在.py文件的末尾或限制导入范围来破坏导入循环。但是,这似乎是解决问题的一种非常糟糕的方法,主要是因为它极有可能无法维护(尤其是使用scope方法)。

作为刚发现asyncio的人,我想知道是否有一种方法可以使用它来处理导入循环,更重要的是,这是否是个好主意。例如,导入模块可能是一个可等待的任务,当模块准备就绪时,即在定义了所有必要属性后,该任务便已完成。

例如:

breakfast.py
cupboard.py
eggs
├── __init__.py
├── yolk.py
└── white.py

breakfastimport eggs开始,然后定义类ScrambledEggscupboard导入breakfast并定义两个类:PanPlate,这两个类都使用breakfast.ScrambledEggs__init__.py导入yolkwhite,两者都从Pan导入cupboard来定义烹饪方法。但是,当它们导入cupboard时,Pan类定义会尝试使用尚未定义的breakfast.ScrambledEggs。这会导致错误。

顺便说一句,我知道这个例子并不是很合理,但是我唯一能想到的就是早上9点钟饿狗。如果这是一个实际程序,则模块之间的交互将完全不同,但是出于示例的原因,请假定导入必须是它们在该程序中的方式。

无论如何,我解决这个问题的想法是将breakfast.py中的导入定义为异步任务,并立即启动它们。然后,我将使ScrambledEggs的定义成为一个可等待的任务,为此,cupboard必须等待直到在其自己的代码中使用ScrambledEggs(即定义Pan和{{ 1}})。同样,Plateyolk可以等到white定义了cupboard之后再继续使用该类。

这种事情可能吗?有更好的解决方案吗?还是我完全误解了Python中异步任务的用法和要点?抱歉,这是一个愚蠢的问题。

0 个答案:

没有答案