我有一个Django应用程序,我试图管理我的一个模型的数据,因为它在数据库中的表行数已经非常不守规矩。
我有一个模型staticmethod,它获取我数据库中的所有'Vehicle'对象,浏览它们,检查它们的图像URL是否仍然有效,如果没有删除它。
有120万条记录(有些记录需要检查多张图像),因此需要很长时间才能完成所有记录。
我知道您可以使用线程来运行多个进程,但我也知道,对于处理数据的方法,每个线程都必须知道另一个线程。有没有办法可以使用多线程来减少通过查询集并进行这些检查所需的时间,例如如果第一个线程查看queryset项目1和2,则线程2将开始查看queryset项目3,并且线程1将跳过查询集项4(如果已完成),并且线程2尚未完成查询集项目3?< / p>
方法
@staticmethod
def image_existence_check():
import threading
import requests
from dealer.models import Dealer
vehicles = Vehicle.objects.all()
for index, veh in enumerate(vehicles):
images = veh.images.all()
if images.count() == 1:
image = images[0]
response = requests.get(image.image_url)
if response.status_code == 200:
veh.has_image = True
else:
veh.has_image = False
elif images.count() > 1:
has_image = True
for img in images:
response = requests.get(img.image_url)
if response != 200:
has_image = False
veh.has_image = has_image
else:
veh.has_image = False
veh.save()