Асинхронные задачи с использованием pool.apply_async()
Кроме map(), класс multiprocessing.Pool() предоставляет другой метод для параллельного запуска процессов, называемый apply_async(). Этот метод позволяет вам отправить вызов функции в пул процессов и немедленно продолжить выполнение, не ожидая результата. Вместо этого вы можете использовать обратный вызов (callback-функцию), чтобы получить результат вызова функции, когда он будет готов.
Пожалуйста, завершите slow_square.py.
import multiprocessing
import time
def slow_square(x):
time.sleep(1)
return x * x
def callback(result):
print(result)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=4)
results = [pool.apply_async(slow_square, (x,), callback=callback) for x in range(10)]
for result in results:
result.wait()
print("All tasks completed.")
В этом примере мы определяем функцию slow_square(), которая принимает число x, ждет одну секунду и затем возвращает квадрат x. Мы также определяем обратную вызов функцию callback(), которая просто выводит результат, когда он доступен.
Затем мы создаем пул из четырех процессов и используем apply_async(), чтобы отправить вызов функции в пул для каждого числа в диапазоне от 0 до 9. Мы передаем функцию slow_square() и аргумент x с использованием параметра args, а также указываем обратную вызов функцию, которая должна быть вызвана, когда результат будет готов.
Затем мы перебираем список результатов и вызываем result.wait(), чтобы заблокировать главный поток, пока результат не будет готов. Наконец, мы выводим сообщение, указывающее, что все задачи завершены.