我在multiprocessing上閱讀了python文檔。如何讓兩個mapper函數平行運行?
但我不得不像下面的要求:
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開始,一個不應該阻止另一個,這是正確的? –