Встраивание потока Python безопасно
Я пытаюсь использовать Python в модуле для анализа программного обеспечения систем автобуса. Для этого мне нужно встраивать Python безопасным для потока способом, так как может быть несколько экземпляров модуля, которые работают независимо. Я мог бы использовать мьютекс для защиты всего доступа к Python и создания уникального (python) модуля для каждого потока. Очевидно, что это самый простой выход, но он связан с ценой невозможности масштабирования между несколькими ядрами. Или я мог бы модифицировать свой модуль, чтобы порождать новые процессы, которые практикующий использует Python, и подключаться к ним через разделяемую память. Это дает мне снижение производительности и требует больше времени для реализации, но отлично масштабируется.
Мой вопрос: как ты думаешь, кто имеет больше смысла? Есть ли другой способ встроить потокобезопасный поток Python или даже таким способом, который масштабируется на несколько ядер.
С наилучшими пожеланиями Мориц
редактировать: я использую CPython
2 ответа
В продолжение моего вопроса: я реализовал его, используя процессы с использованием Python. Хороший текст, почему многопроцессорная библиотека не помогает, можно найти здесь: http://pkaudio.blogspot.com/2010/04/whey-multiprocessing-doesnt-always-work.html Она была написана не мной, но этот парень та же проблема, что и у меня. Я благодарен всем, кто пытался мне помочь.
Если вы привязаны к процессору, Python может масштабироваться до нескольких ядер с помощью многопроцессорной библиотеки. Однако, если вы ограничены вводом / выводом, тогда многопоточность обычно достаточна.
Если вам нужна легкая защита потоков, используйте очередь для всех сообщений.