私のWebアプリケーションの1つでバックグラウンドで実行する必要がある機能があります。AppConfig.ready()がDjangoセットアップで2回実行しています(Herokuを使用)
class MyAppConfig(AppConfig):
run_already = False
def ready(self):
from .tasks import update_products
if "manage.py" not in sys.argv and not self.run_already:
self.run_already = True
update_products()
しかし、このコマンドは(update_products()呼び出し)
As stated in the documentation:
通常の初期化では2回実行されている。以下に示すように
私はカスタムのAppConfigを実装しましたプロセスでは、readyメソッドはDjangoによって初めて と呼ばれます。しかし、いくつかのコーナーケースでは、特に がインストールされたアプリケーションを操作しているテストでは、readyはより多く と呼ばれるかもしれません。その場合は、冪等のメソッドを書くか、 フラグをAppConfigクラスに入れて、 を正確に1回実行するコードを再実行しないようにします。
ドキュメントに記載されていることに従っているように感じます。何がありますか?
同じ問題を抱えています。あなたはそれを解決しましたか? –
@PavelBernshtam、私が正しく覚えていれば、それは複数のスレッドを実行しているgunicornでした。私がウェイトレスにホスティングするように変更したとき、問題はなくなった。私は 'run_already = False'、 'not self.run_already'のコードも含めなかった。 – dmcmulle