Я прочитал эту документацию python по адресу multiprocessing.Как сделать две функции сопоставления параллельными?
Но у меня был требование, как следующее:.
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]))
У меня есть случай, когда использование функция й загораживающий (в моем случае это слушает очередь RabbitMQ, поэтому оно должно быть блокированием я использовал длительная временная задержка - 100000000000000, чтобы подразумевать бесконечное блокирование времени). Я смоделировал блокировку с time.delay здесь.
, но мне нужно, чтобы f2 (который отличается от f) запускался и запускался параллельно. В настоящее время он даже не переходит в f2 по мере того, как сам блок блокируется.
Может кто-нибудь, пожалуйста, дайте несколько советов о том, как сделать f и f2 начальным, несмотря на то, что f и f2 блокируют.
Update:
Похоже, я нашел способ, но озадачен
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()
как даже после того, как переназначение res1 это работает, и это вызывает даже е?
привет, мой код под apply_async, похоже, работает .. я не знаю, как это сделать. может у руководства? –
'apply_async' работает только для 1 значения. Кажется, вы хотите создать список, используя список в качестве входных данных. 'apply_async' не сделает этого. Вам придется перестроить порядок результатов по порядку ввода. –
no Мне хотелось, чтобы и f и f2 запускались, и нельзя было блокировать другое, что происходит правильно? –