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 は同じフォルダー内の他のワーカーに必要です。