迭代一系列值的子集的Pythonic方法?

时间:2013-03-10 00:51:45

标签: python celery

我有一个类似的功能:

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]

1 个答案:

答案 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()方法的返回值是什么的情况下,我无法确定。

相关问题