2017-02-16 11 views
1

関数の途中でDB(呼び出し結果)呼び出しを呼び出せるようにしたいのですが、関数が実行され続けるため、のボトルネックが発生しません。これはNOTウェブアプリケーションです。すべてオフラインです。 説明の目的のためにpythonとdbの非同期リクエスト(別名、fire-and-forget):どのように?

スニペット:

a = list(range(100)) 
for i in a: 
    my_output = very_long_function(i) 
    # I'd like to_sql to run in a "fire-and-forget fashion" 
    function_of_choice_to_sql(my_output) 

私はまたは他のツールasyncio スレッド図書館、とオフに優れていたかどうかを疑問に思いました。私はこれらの努力のなかでどれも成功しなかった。私は実用的な解決策をとるだろう。

助けてくださいか?

p.s:同時実行/私の場合、私の関数が計算するのにかかる時間が書き込まれるデータベースのための時間よりもはるかに大きいのでなどをロックすると何の問題もないが好きになるでしょう。

+0

可能であれば、このバックグラウンドタスクを実行するために使用することができます。 –

答えて

2

ThreadPoolExecutorを使用すると、簡単なインターフェイスを使用して、呼び出し元をワーカーのプールにスケジュールすることができます。特に、mapメソッドに興味があります。

from concurrent.futures import ThreadPoolExecutor 

with ThreadPoolExecutor(max_workers=4) as executor: 
    # Lazy map (python3 only) 
    outputs = map(very_long_function, range(10)) 
    # Asynchronous map 
    results = executor.map(function_of_choice_to_sql, outputs) 
    # Wait for the results 
    print(list(results)) 
+0

cool。すぐに試してみるよ – Asher11

関連する問題