Я не уверен, справедливо ли сказать, что это невозможно, чтобы быть в безопасности. Я думаю, что проблема в том, что разветвление выполняется без учета блокировок. В более качественной (высокоуровневой) среде вы можете, например, утверждать или блокировать в fork, пока не будет активных блокировок. Для этого потребуется, чтобы Python зависел только от C-библиотек, которые безопасны для форка и не имеют блокировок, или чтобы Python гарантировал, что код C не выполняется на fork. Это возможно, но сложно. Возможно, Python может спросить у ОС: «Этот процесс сейчас удерживает какие-либо блокировки ОС?» если да, вам нужно подождать, чтобы форк (или утверждать).

сно сhttps://github.com/joblib/joblib/issues/180, а такжеЕсть ли безопасный способ создать подпроцесс из потока в Python? многопроцессорный модуль Python не позволяет использовать его из потоков. Это правда?

Насколько я понимаю, это нормально для ветвления потоков, если вы не держите поток. Блокировка, когда вы это делаете (в текущем потоке? Где-нибудь в процессе?). Тем не менее, Pythonдокументация ничего не говорит о том, являются ли объекты Threading.Lock безопасными для общего доступа после разветвления.

Существует также следующее: блокировки, совместно используемые модулем регистрации, вызывают проблемы с fork.https://bugs.python.org/issue6721

Я не уверен, как возникает эта проблема. Похоже, что состояние всех блокировок в процессе копируется в дочерний процесс, когда текущий поток разветвляется (что похоже на ошибку проектирования и обязательно приведет к взаимоблокировке). Если да, то действительно ли использование многопроцессорной обработки обеспечивает какую-либо защиту от этого (поскольку я могу свободно создавать свою многопроцессорную работу. Пул после создания многопоточности. Блокировка создается и вводится другими потоками, а после того, как потоки запустили это с использованием небезопасной регистрации module) - в документах по многопроцессорным модулям также ничего не говорится о том, следует ли размещать multiprocessing.Pools перед блокировками.

Помогает ли замена многопоточности заменять многопоточность. Блокировка позволяет избежать этой проблемы и позволяет нам безопасно комбинировать потоки и вилки?

Ответы на вопрос(1)

Ваш ответ на вопрос