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 はメッセージ スタックに対して発火し、最後にセロリ ワーカーによって処理されるため、実行がブロックされません。

start と stop の間のすべての数値を処理する必要がありますが、これをセクション (範囲) に分割できます。

範囲が ~20000 の場合、操作 get_headers が最適であることがわかりました。ここで、範囲 = (停止 - 開始)

任意の範囲を 20000 のグループに分割し、各グループを関数で実行する方法を知りたいので、関数が異なる開始値と停止値で複数回呼び出されますが、前の範囲はまだカバーされています。

したがって、start と stop の開始値がそれぞれ 1 と 100000 の場合、次のように 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 に答える