É seguro chamar o multiprocessamento a partir de um thread em Python?

De acordo comhttps://github.com/joblib/joblib/issues/180eExiste uma maneira segura de criar um subprocesso a partir de um thread em python? o módulo de multiprocessamento Python não permite o uso de dentro de threads. Isso é verdade?

Meu entendimento é que não há problema em desviar dos threads, contanto que você não esteja segurando um encadeamento. Bloqueie quando fizer isso (no thread atual? Em qualquer lugar do processo?). No entanto, o Pythondocumentação é silencioso sobre se os objetos threading.Lock são compartilhados com segurança após um fork.

Há também o seguinte: bloqueios compartilhados no módulo de registro causam problemas com o fork.https://bugs.python.org/issue6721

Não tenho certeza de como esse problema surge. Parece que o estado de todos os bloqueios no processo é copiado no processo filho quando o encadeamento atual se bifurca (o que parece um erro de design e com certeza um conflito). Em caso afirmativo, o uso do multiprocessamento realmente fornece alguma proteção contra isso (já que estou livre para criar meu multiprocessamento.Pool após o threading.Lock é criado e inserido por outros threads, e depois que os threads iniciaram isso usando o log não seguro para garfo module) - os documentos do módulo de multiprocessamento também ignoram se o multiprocessing.Pools deve ser alocado antes do Locks.

Substituir threading.Lock pelo multiprocessing.Lock em todos os lugares evita esse problema e permite combinar com segurança segmentos e garfos?

questionAnswers(1)

yourAnswerToTheQuestion