我的python代码中存在循环导入问题。一个模块的装饰器需要在另一个模块中调用一个函数。此函数使用从前一个模块导入的装饰器。显示的错误消息无法导入名称xxxx
我的代码结构:
__init__.py
worker1.py
worker2.py
...
并且 init .py
中有一个装饰器def defer():
def wrapper(func):
def wrapper_f(*args, **kargs):
some logic here...
new_func = eval("%s.apply_async" % func.func_name) # I use celery to do async call here
new_func(args = args, kwargs = kargs)
wrapper_f.__name__ = func.func_name # This is to allow celery to load different task based on function name
return wrapper_f
return wrapper
在worker1.py
中@celery.task
@defer
def task1(*args, **kargs):
some logic
它将在__init__.py和worker1.py中进行循环导入,因为 eval(“%s.apply_async”%func.func_name)需要在worker1中加载函数,而worker1需要加载__init__中的装饰器。如何解决这个循环导入问题?
顺便说一句,我无法将装饰器功能移动到worker1.py,bcz是同一文件夹中的其他工作人员所需要的。