1

我的 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 中,因为同一文件夹中的其他工作人员需要它。

4

0 回答 0