我有一个类似的功能:
def long_running_with_more_values(start, stop):
headers = get_headers.delay(start, stop)
insert_to_db.delay(headers)
此功能是并行从网络请求的批处理数据。 get_headers + insert_to_db将触发到消息堆栈,最后由芹菜工作者处理,因此不会阻止执行。
它必须处理开始和结束之间的每个数字,但可以将其分成几个部分(范围)。
我发现当范围为~20000时,操作get_headers是最佳的,其中range =(stop - start)
我想知道如何将任意范围拆分为20000组,并通过该函数运行每个组,因此我最终使用不同的起始值和停止值多次调用该函数,但仍覆盖前一个范围总
因此,对于分别为1和100000的开始和停止的起始值,我希望get_headers被调用5次,具体如下:
[1,20000][20001,40000][40001,60000][60001,80000][80001,100000]
答案 0 :(得分:1)
def long_running_with_more_values(start, stop):
while start < stop:
if stop - start < 20000:
headers = get_headers.delay(start, stop)
break
else:
headers = get_headers.delay(start, start + 20000)
start += 20000
insert_to_db.delay(headers)
请注意,headers
只会存储上次调用get_headers.delay()
的返回值。您可能需要将代码更改为headers += get_headers.delay(start, stop)
。在不知道get_headers.delay()
方法的返回值是什么的情况下,我无法确定。