这是我的情况。我有三张桌子Book
,Publisher
和Price
。我有一个管理命令,它循环遍历每本书,对于每本书,它会查询出版商以获取价格,然后将其存储到价格表中。这是一个非常简单的 HTTP GET 或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 请求。