私は与えられたデータセットに2つの隣接する要素を持つ特定の関数を適用しようとしています。以下の例を参照してください。例えばマルチタスクは一度にPythonで
# I'll just make a simple function here.
# In my real case, I send request to database
# to get the result with two arguments.
def get_data_from_db_with(arg1, arg2):
# write a query with arg1 and arg2 named 'query_result'
return query_result
data = [arg1, arg2, arg3, arg4]
result = []
for a, b in zip(data, data[1:]):
result.append(get_data_from_db_with(a, b))
上記見場合のように、データの長さが4である場合、私は、データベースへの要求を3回送信します。各要求は、データの検索に約0.3秒かかるため、合計で0.9秒(0.3秒* 3要求)です。問題は、リクエストの数が増えるにつれて、全体の時間も増加することです。私がしたいことは、可能であれば、すべてのリクエストを一度に送信することです。基本的には、このように見えます。上記のコードで
、
1) get_data_from_db_with(arg1, arg2)
2) get_data_from_db_with(arg2, arg3)
3) get_data_from_db_with(arg3, arg4)
を連続して処理されるであろう。
可能であれば、一度にすべてのリクエストを連続して送信することはできません。もちろん、要求の数は変わりません。しかし、全体的な時間消費は私の前提に基づいて減少します。
私は非同期、マルチプロセッシングなどを探しています。 コメントやフィードバックは非常に役に立ちます。
ありがとうございます。
あなたのアドバイスありがとう! 'threading'の使用に関する質問があります。 私が知る限り、PythonはGIL(グローバルインタプリタロック)を与えられたマルチスレッドよりもマルチプロセッシングを好んでいます。 私は間違っているかもしれませんが、ちょうど興味がありました。 –
@GeeYeolNahmそれはあなたが何をしようとしているかによってまったく異なります。 GILはすべてのI/O上でリリースされるので、大部分の時間(CPU集約的なタスクのinsted)でスレッドがプロセスよりも優先される限り、リリースされます。 – freakish
私はマルチスレッドのテストを試みました。それは平均で2〜3倍速くなった。うんうん、私の作業環境でこのケースでマルチスレッドが動作しました。もう一度、ありがとう! –