我有一个这样的循环:
def handle(self, *args, **options):
database.objects.all().delete()
for x in list:
db.objects.create(
...add some data to database table...)
该列表包含100个值。但我可以一次只运行30个值的循环。并且需要在脚本结束时运行所有100个值。
为什么我有这么奇怪的问题,是脚本从第三方数据库获取数据,但允许在一个第三方数据库中获取30个对象 时间。所以我需要的是获取30个值的脚本。以某种方式暂停并获取接下来的30个值,并在最后一次,取10个值,剩下并完成。
这样的事情是可能的,还是我需要将我的列表列入许多小清单并一次运行一个?
答案 0 :(得分:1)
试试这个
a=0
for x in list:
#whatever you are doing
a+=1
if a==30:
break
#Then do it again
for x in list[a:]:
#whatever you are doing
a+=1
if a==60:
break
#Again
for x in list[a:]:
#whatever you are doing
a+=1
if a==90:
break
#Last Time!
for x in list[a:]:
#whatever you are doing
答案 1 :(得分:1)
我建议你以30个元素的间隔对列表进行切片,并在每个间隔上调用该函数。
答案 2 :(得分:0)
使用切片很容易。 [:30]
指的是从开头到第30个元素的子列表。 [30:]
是指从第30个元素到结尾之后的子列表。
要处理30个值块中的列表,您可以执行以下操作:
while len(list) > 0:
dostuff(list[:30])
list = list[30:]
要在每30个元素之后做一些事情,你可以这样做:
while len(list) > 0:
for item in list[:30]:
doSomething(item)
dostuff()
list = list[30:]