私の場合です。私は3つのテーブルBook
とPublisher
とPrice
を持っています。私は各書籍についてループを繰り返す管理コマンドを持っており、各書籍については価格を入手するために出版社に問い合わせ、価格表に格納します。それは私が価格を得るために作る非常に簡単なHTTP GETまたはUDP要求です。ここに私のコードのスケルトンがどのようなものか:ヘルプが必要なパラレルHTTPリクエストの構成
@transaction.commit_on_success
def handle(self, *args, **options):
for book in Book.objects.all():
for publisher book.publisher_set.objects.all():
price = check_the_price(publisher.url, book.isbn)
Price.objects.create(book=book, publisher=publisher, price=price)
コードはシンプルですが、私は10000冊の本を持っている場合、それはかかり本当に遅いと時間を取得します。私は簡単に並列HTTPリクエストを作成することでこれをスピードアップすることができます。私は50のパラレルリクエストを作成することができますが、これはjiffyで実行されますが、このコードをどのように構造化するかはわかりません。
私のサイト自体は非常に小さくて軽量なサイトで、私はRabbitMQ/Celeryのものから離れようとしています。私はちょうどそれが今取る大きな事だと感じています。
トランザクションの整合性を維持しながらこれを行う方法に関する推奨事項はありますか?
編集#1:これは私が実際にやっていることの類推として使用されます。この類推を書いて、私はいくつかのUDP要求をする必要があることを忘れていました。
操作全体に対してトランザクションの整合性が本当に必要ですか?あなたは価格の日付を更新し、単価ごとの取引をすることはできませんか? – Macke
私が欲しかったのは、何らかの理由でコマンドがクラッシュしたり、この長期間にいくつかのエラーが発生した場合、何も保存されないということです。私がその問題を回避できるより良い方法があれば、それを喜んで使用します。ありがとう。 –