Давая доступ к совместному памяти после дочерних процессов уже запущена

Как дать ребенку обрабатывать доступ к данным в общей памяти, если данные доступны только после того, как дочерние процессы были порождены (с использованием MultiProcessing.process )?

Я знаю, о многопроцессоре MultiPressing.sharedCtypes.rawarray , но я не могу выяснить, как дать своим дочерним процессам доступа к RawaRie , созданный после того, как процессы уже начал.

Данные генерируются родительским процессом, а объем данных не известен заранее.

Если не для GIL , я бы использовал резьбу вместо этого, что сделает эту задачу немного проще. Использование реализации Non-Cpython не является опцией.


Глядя под капотом Muliprocessing.sharedctypes , похоже, что общие объекты CTYPE выделяются , используя MMAP Ed Memory .

Итак, этот вопрос действительно сводится к: может получить дочерний процесс доступа к анонимно сопоставленной памяти, если MMAP () был вызван родителем после того, как ребенок был порожден?

это несколько В вене чего задают в , этот вопрос , за исключением того, что в моем случае вызывающий абонент MMAP () является родительским процессом, а не в детском процессе.


(Решено)

Я создал свою собственную версию Rawarray , что использует Shm_open () под капотом. Результирующая общий массив CTYPES может быть передан с любым процессом, если идентификатор ( тег ) совпадает.

См. Этот ответ для деталей и пример.

-121--1131344-

Оператор SQL Server «» очень медленно по сравнению с «=» на столе с несколькими миллионами строк У меня есть две таблицы. Формы имеют ~ 77000 строк. Журналы ~ 2,7 миллиона строк. Следующий запрос возвращает «30198» менее чем в секунду: выберите COUNT (отчетливые Logs.docid) из журналов, форм, где logs.docid = ...

У меня есть две таблицы. Формы имеют ~ 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;

Почему «не равный» запрос Итак намного медленнее?

10
задан Tom Redman 14 September 2011 в 15:51
поделиться