Tarefas Assíncronas com Pool.apply_async()
Além de map(), a classe multiprocessing.Pool() fornece outro método para executar processos em paralelo chamado apply_async(). Este método permite que você envie uma chamada de função para um pool de processos e continue a execução imediatamente sem esperar pelo resultado. Em vez disso, você pode usar uma função de callback para recuperar o resultado da chamada da função quando estiver pronto.
Por favor, complete 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.")
Neste exemplo, definimos uma função slow_square() que recebe um número x, espera por um segundo e, em seguida, retorna o quadrado de x. Também definimos uma função de callback callback() que simplesmente imprime o resultado quando ele está disponível.
Em seguida, criamos um pool de quatro processos e usamos apply_async() para enviar uma chamada de função para o pool para cada número no intervalo de 0 a 9. Passamos a função slow_square() e o argumento x usando o parâmetro args, e também especificamos a função de callback a ser chamada quando o resultado estiver pronto.
Em seguida, percorremos a lista de resultados e chamamos result.wait() para bloquear a thread principal até que o resultado esteja pronto. Finalmente, imprimimos uma mensagem para indicar que todas as tarefas foram concluídas.