1

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

eval("%s.apply_async" % func.func_name)は worker1 で関数をロードする必要があり、worker1 は __init__ でデコレータをロードする必要があるため、__init__.py と worker1.py で循環インポートが行われます。この循環インポートの問題を解決するにはどうすればよいですか?

ところで、decorator 関数を worker1.py に移動することはできません。bcz は同じフォルダー内の他のワーカーに必要です。

4

0 に答える 0