我的 python 代码中有一个循环导入问题。一个模块的装饰器需要调用另一个模块的函数。这个函数使用的是从前一个模块导入的装饰器。错误信息显示 can't import name 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 中,因为同一文件夹中的其他工作人员需要它。