Как убедиться, что дочерний процесс заканчивает копирование данных в общую память перед вызовом join ()? - PullRequest
0 голосов
/ 28 июня 2019

Я использую multiprocessing.Process для загрузки некоторых изображений и сохранения их в общей памяти, как объяснено здесь . Проблема в том, что иногда мой код падает из-за огромного скачка памяти в совершенно случайные моменты времени. Я просто имел представление о том, что может быть причиной этого: у процесса не было достаточно времени, чтобы скопировать содержимое изображения в общую память в ОЗУ к моменту времени join(). Чтобы проверить свою гипотезу, я добавил time.sleep(0.015) после выполнения join() для каждого из моих процессов, и это уже уменьшило количество всплесков памяти примерно на 90% и более. Тем не менее, я до сих пор не уверен на 100%, не получим ли частые всплески памяти, потому что это небольшое количество времени может помочь полностью передать данные в общую память или нет.

Итак, мне интересно, есть ли способ убедиться, что дочерний процесс завершил копирование данных в память до вызова .join()? Я не хочу использовать фиксированный номер при звонке time.sleep(). Было бы здорово узнать, когда данные были полностью перенесены в общую память, а затем выполнить join().

...