Как дать ребенку обрабатывать доступ к данным в общей памяти, если данные доступны только после того, как дочерние процессы были порождены (с использованием MultiProcessing.process )?
Я знаю, о многопроцессоре MultiPressing.sharedCtypes.rawarray , но я не могу выяснить, как дать своим дочерним процессам доступа к RawaRie
, созданный после того, как процессы уже начал.
Данные генерируются родительским процессом, а объем данных не известен заранее.
Если не для GIL , я бы использовал резьбу вместо этого, что сделает эту задачу немного проще. Использование реализации Non-Cpython не является опцией.
Глядя под капотом Muliprocessing.sharedctypes , похоже, что общие объекты CTYPE выделяются , используя MMAP
Ed Memory .
Итак, этот вопрос действительно сводится к: может получить дочерний процесс доступа к анонимно сопоставленной памяти, если MMAP ()
был вызван родителем после того, как ребенок был порожден?
это несколько В вене чего задают в , этот вопрос , за исключением того, что в моем случае вызывающий абонент MMAP ()
является родительским процессом, а не в детском процессе.
Я создал свою собственную версию Rawarray
, что использует Shm_open ()
под капотом. Результирующая общий массив CTYPES может быть передан с любым процессом, если идентификатор ( тег
) совпадает.
См. Этот ответ для деталей и пример.
-121--1131344-
У меня есть две таблицы. Формы имеют ~ 77000 строк. Журналы ~ 2,7 миллиона строк.
Следующий запрос возвращается «30198» менее чем в секунду:
SELECT COUNT(DISTINCT logs.DOCID) FROM logs, forms WHERE logs.DOCID = forms.DOCID;
, и этот запрос на до настоящего времени запускается ~ 15 минут, и до сих пор не закончил:
SELECT COUNT(DISTINCT logs.DOCID) FROM logs, forms WHERE logs.DOCID <> forms.DOCID;
Почему «не равный» запрос Итак намного медленнее?