私はmultiprocessingに関するこのpythonのドキュメントを読んでいます。2つのマッパー関数を並列実行するには?
しかし、私は次のような要件を持っていた:
from multiprocessing import Pool
import time
def f(x):
print(x)
time.sleep(100000000000000);
return x*x
def f2(x):
print('**' + str(x) + '**')
time.sleep(100000000000000);
return x*x*x;
if __name__ == '__main__':
p = Pool(5)
print(p.map(f, [1, 2, 3]))
print(p.map(f2,[1,2,3]))
私は、関数fは、私が使用私の場合、それはRabbitMQのキューに耳を傾け、それを阻止しなければならない(ブロックされたユースケースを持っています。長時間の遅延 - 100000000000000は無限時間ブロックを意味します)。 私はここでtime.delayでブロックをシミュレートしています。
が必要ですが、f2(fとは異なります)を起動して並列実行する必要があります。現時点では、f自体がブロックするので、f2にも向かない。
fとf2が両方ともブロックされているにもかかわらず、fとf2を並行して開始する方法に関するガイダンスをいくつか教えてください。
更新:
私は道を見つけたが、それでもRES1を再割り当てした後、それが動作し、それもF呼び出す方法
from multiprocessing import Pool
import time
def f(x):
print(x)
time.sleep(100000000000000);
return x*x
def f2(x):
print('**' + str(x) + '**')
time.sleep(100000000000000);
return x*x*x;
if __name__ == '__main__':
p = Pool(5)
res = p.apply_async(f, [2])
res = p.apply_async(f2,[4])
res.get()
を困惑ように思えますか?
こんにちは、apply_asyncの下の私のコードが動作するようです..私はどのようにわからない。あなたはガイドできますか? –
'apply_async'は1つの値に対してのみ機能します。リストを入力として使用してリストを作成したいと思うようです。 'apply_async'はそれをしません。入力の順序から結果の順序を再構築する必要があります。 –
いいえ、私はfとf2の両方を開始したいと思います。もう一方をブロックしてはいけません。 –