問題タブ [django-celery]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - Django Celery と複数のデータベース (Celery、Django、RabbitMQ)
Django Celery で使用する別のデータベースを設定することは可能ですか?
複数のデータベースを構成するプロジェクトがあり、Django Celery でデフォルトのデータベースを使用したくありません。
djangoセロリの管理ページを引き続き使用して、この別のデータベースに保存されている結果を読み取ることができればいいと思います:)
django - タスクがすでにdjango-celeryでキューに入れられているかどうかを確認するにはどうすればよいですか?
これが私の設定です:
- django 1.3
- セロリ2.2.6
- django-セロリ2.2.4
- djkombu 0.9.2
私のsettings.pyファイルには
つまり、データベースを使用してタスクをキューに入れているだけです。
次に、私の問題について説明します。ユーザーが開始したタスクがあり、完了するまでに数分かかる場合があります。タスクをユーザーごとに1回だけ実行したいので、タスクの結果を一時ファイルにキャッシュするので、ユーザーがタスクを再度開始した場合は、キャッシュされたファイルを返すだけです。ビュー関数に次のようなコードがあります。
このコードはほとんど機能します。しかし、ユーザーがページをすばやくリロードすると、問題が発生します。タスクがキューに入れられてから、タスクが最終的にキューから削除されてワーカーに渡されるまでに、1〜3秒の遅延があります。この間、タスクの状態はPENDINGのままであるため、ビューロジックは重複するタスクを開始します。
必要なのは、タスクがすでにキューに送信されているかどうかを確認する方法です。これにより、タスクを2回送信することになりません。セロリでこれを行う標準的な方法はありますか?
celery - celeryd が実行されていない場合、その task.delay または task.apply_async が失敗するように指定することは可能ですか?
djcelery と djkombu を使用しています。私はRabbitMQを使用していましたが(推奨オプションであるため)、RabbitMQはVPSでメモリを使いすぎており、私は安っぽいです。
私のコードがタスクをスケジュールしようとしていて、celeryd が実行されていない場合、私のアプリで例外がスローされると良いと思います。これは、スーパーバイザー、nagios などによって celeryd を監視するための一種のバックアップ プランです。
最初は設定でこれができると思ってimmediate
いましたが、私の Django ORM 設定ではうまくいきませんでした。
django - django-celery (djcelery) テーブルは何のためのものですか?
syncdb を実行すると、多くのテーブルが次のように作成されていることに気付きました。
- djcelery_crontabスケジュール
- ...
- djcelery_taskstate
django-kombu がトランスポートを提供しているため、実際のキューに関連付けることはできません。タスクを実行しても、これらのテーブルには何も入力されていません。これらのテーブルは何に使用されますか? 監視目的のみ -- 有効にすると?
もしそうなら、AsyncResult() のルックアップを行うと、実際には djcelery の代わりに django-kombu テーブルを介してタスク結果をルックアップしていると思いますか?
ありがとう。
django - celerybeat は定期的なタスクを自動的に無効にします
django-celeryの管理インターフェイスを使用して、セロリの定期的なタスクを作成したいと思います。手動またはスクリプトによって呼び出されたときにうまく動作するタスクをセットアップしました。celerybeatでは機能しません。デバッグログによると、タスクはenabled = False
最初の取得時に設定されていますが、その理由は不思議です。
定期的なタスクを追加して位置引数として渡す[1, False]
と、タスクは自動的に無効になり、それ以上の出力は表示されません。引数なしで追加すると、タスクは実行されますが、必要な引数を指定しなかったため、すぐに例外が発生します (理にかなっています)。
ここで何が問題なのか誰にもわかりますか?
前もって感謝します。
これは、引数を指定した後の出力です。
編集: 次の設定で動作します。なぜdjango-celeryで動作しないのか、まだわかりません。
django - セロリログの質問
Ubuntuでrabbitmq-serverを使用してdjangoapp+django-celeryを実行しています。セロリでこれらのエラーがたくさん発生します。
[2011-06-03 13:58:15,387:警告/ PoolWorker-1] HTTPエラー500:内部サーバーエラー
何が問題になっているのかを確認するために、このリクエストのトレースバックまたは応答をどこで見つけることができますか?どのログを見る必要がありますか?
ありがとう、Arshavski Alexander
rabbitmq - celerybeat shutdown-initscriptオーダー?
「再起動防止」になるようにrabbitmq/celery / django-celery / djangoを設定しようとしています。つまり、すべてが自動的に元に戻ります。これを除いて、すべてが正常に機能しているようです。
再起動すると、すべてのサービスが開始されますが、celerydはrabbitmqの前に開始され、その後、接続できないためにcelerybeatが終了するようです(?):
Ubuntuでは、apt付きのrabbitmq-server、pip付きのdjango-celeryをvirtualenvにインストールしてから、https://github.com/ask/celery/tree/master/contrib/debianから取得した「celeryd」initscriptをシンボリックリンクしました。 /etc/init.dの/init.d、virtualenvからのdjangocelerydを使用するように/etc/ default / celerydで構成し、経由で「再起動防止」にしました(おそらく「デフォルト」が問題ですか?)
celerydとcelerybeatを別々のinitscriptで実行するのではなく、Beatを含めるようにcelerydを構成しました(おそらくそれが問題ですか?):
この問題を解決するための指針はありますか?
もし私が
苦情はありません:
しかし、私は手動の手順の必要性を排除する必要があります。
python - セロリタスクとデコレータのカスタマイズ
私はdjangoとセロリ(django-celery)を使ったプロジェクトに取り組んでいます。私たちのチームは、すべてのデータ アクセス コードを(app-name)/manager.py
(このように Manager にラップするのではなくdjango
) ラップし、コードを (app-name)/task.py に配置して、セロリを使用したタスクのアセンブルと実行のみを処理することにしました (したがって、django はありません)。このレイヤーの ORM 依存関係)。
私manager.py
の には、次のようなものがあります。
私の task.py では、それらをタスクにラップするのが好きです (その後、これらのタスクを使用してより複雑なタスクを実行する可能性があります)。そのため、次のデコレータを記述します。
次に (まだtask.py
):
なしでも問題なく動作し@task
ます。しかし、その@task
デコレータを(セロリのドキュメントで指示されているように一番上に)適用した後、物事はバラバラになり始めます。どうやら、 が呼び出されるたびmfunc_to_task.__call__
に、同じtask.get_tag
関数が として渡されf
ます。wrapper_f
そのため、毎回同じ結果になりましたが、今では、単一のタグを取得することしかできません。
私はデコレータが初めてです。ここで何がうまくいかなかったのかを理解するのを手伝ってくれる人、またはタスクを達成するための他の方法を指摘してくれる人はいますか? 私は、すべてのデータ アクセス関数に対して同じタスク ラップ コードを記述するのが本当に嫌いです。
python - djangoプロジェクトのCelery非同期タスク。使い方?
djangoプロジェクトで長いタスクを実行する必要があります。ブローカーとしてredisでセロリを使用することを望みました。インストールされたredisの実行:
これで、サーバーはポート6379で接続を受け入れる準備ができました。
django-celeryをインストールするよりも、以下を構成します。
そしてそれを実行します:
私の例のタスクは次のようになります。
今、私はそれをシェルで実行しようとします:
非常に長く待機し、Tracebackhttp://dpaste.com/555939/をレンダリングします。それは何でしょうか?多分私は何かが恋しいですか?
django - セロリイベントレットタスクでの多くのソケットエラー
--pool = eventletオプションを指定してセロリワーカーを実行すると、amqplib.client_0_8.method_framing.read_methodから多くの「IOError:Socketclosed」例外が発生します。また、eventlet.hubs.hub.switchから多くのタイムアウト例外が発生しています。
https://gist.github.com/821848にあるようなasync_manage.pyスクリプトを使用して、次のような動作を実行しています。
これは既知の問題ですか、それとも構成やセットアップに問題がありますか?
djcelery 2.2.4、Django 1.3、eventlet0.9.15を実行しています。