これが私の場合です。私は3つのテーブルを持ってBook
いPublisher
ますPrice
。各本をループする管理コマンドがあり、各本について、出版社にクエリを実行して価格を取得し、それを価格テーブルに保存します。価格を取得するために行うのは、非常に単純なHTTPGETまたはUDPリクエストです。これが私のコードのスケルトンがどのように見えるかです:
@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の並列リクエストを行うことができましたが、これは簡単に実行できますが、このコードを構造化する方法がわかりません。
私のサイト自体は非常に小さくて軽量なサイトであり、RabbitMQ/Celeryのものから離れようとしています。今、それを引き受けるのは大きなことだと感じています。
トランザクションの整合性を維持しながらこれを行う方法に関する推奨事項はありますか?
編集#1:これは私が実際に行っていることのアナロジーとして使用されます。このアナロジーを書いているときに、私はいくつかのUDP要求も行う必要があることを言及するのを忘れました。