0

我有一个类似于:

def long_running_with_more_values(start, stop):
    headers = get_headers.delay(start, stop)
    insert_to_db.delay(headers)

该功能是对从网络并行请求的数据进行批处理。get_headers + insert_to_db 正在向消息堆栈触发,并最终由 celery 工作人员处理,因此不会阻塞执行。

它必须处理开始和停止之间的每个数字,但可以将其拆分为部分(范围)。

我发现当范围为 ~20000 时,操作 get_headers 是最佳的,其中 range = (stop - start)

我想知道如何将任意范围拆分为 20000 个组并通过该函数运行每个组,因此我最终会以不同的开始和停止值多次调用该函数,但仍总体覆盖前一个范围。

因此,对于 1 和 100000 的 start 和 stop 的起始值,我希望 get_headers 被调用 5 次,如下所示:

[1,20000][20001,40000][40001,60000][60001,80000][80001,100000]
4

1 回答 1

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()方法的返回值是什么,我真的无法判断。

于 2013-03-10T01:03:59.593 回答