Aqui está um código para demonstrar minha pergunta:
from multiprocessing import Process
def worker():
print("Worker running")
if __name__ == "__main__":
p = Process(target=worker)
p.start()
input("1...")
input("2...")
p.join()
Observação: executado em Python 3.13, Windows x64.
E a saída que obtive foi (após inserir Enter
duas vezes):
1...
2...
Worker running
Process finished with exit code 0
A partir da saída, podemos ver que o processo foi inicializado e começou a ser executado após a segunda entrada. Eu pensei start()
que deveria bloquear e garantir que o processo filho fosse totalmente inicializado.
Esse é um comportamento normal do multiprocessamento do Python?
Porque se Threading for usado aqui, esse problema raramente ocorre. Eu sempre executo a thread antes da linha input("1...")
.
Posso perguntar se Process.start()
isso não garante que o processo seja totalmente iniciado, como devemos codificar para garantir que o processo filho esteja realmente em execução antes de prosseguir no processo pai?
Esse é um comportamento normal e geralmente é exatamente o que você quer quando escolhe multiprocessamento em vez de, digamos, threading, ou seja, os processos continuam em paralelo e não bloqueiam uns aos outros.
Conforme mencionado nos comentários, aqui está um exemplo de como você pode ter certeza de que o trabalhador está em execução antes de prosseguir:
Um padrão comum, no entanto, é comunicar-se com o trabalhador por meio de uma fila de trabalho e um evento de parada (ou algum outro meio) para instruí-lo a desligar.