Встраивание потока Python безопасно - PullRequest
1 голос
/ 15 октября 2010

Я пытаюсь использовать Python в модуле для анализа программного обеспечения систем автобуса. Для этого мне нужно встраивать Python безопасным для потока способом, поскольку может быть несколько экземпляров модуля, которые работают независимо. Я мог бы использовать мьютекс для защиты всего доступа к Python и создания уникального (python) модуля для каждого потока. Очевидно, что это самый простой выход, но он связан с ценой невозможности масштабирования между несколькими ядрами. Или я мог бы модифицировать свой модуль, чтобы порождать новые процессы, которые практикующий использует Python, и подключаться к ним через общую память. Это снижает производительность и требует больше времени для внедрения, но отлично масштабируется.

Мой вопрос: как ты думаешь, кто из них имеет больше смысла? Есть ли другой способ встроить потокобезопасный поток Python или даже таким способом, который масштабируется на несколько ядер.

С уважением, Мориц

редактировать: я использую CPython

Ответы [ 2 ]

3 голосов
/ 15 октября 2010

Если вы привязаны к процессору, Python может масштабироваться только до нескольких ядер, используя многопроцессорную библиотеку.Однако, если вы привязаны к вводу / выводу, тогда обычно достаточно многопоточности.

Если вы хотите легкой безопасности потоков, используйте очередь для всех сообщений.

0 голосов
/ 22 октября 2010

В продолжение моего вопроса: я реализовал его с помощью процессов с использованием Python. Хороший текст, почему многопроцессорная библиотека не помогает, можно найти здесь: http://pkaudio.blogspot.com/2010/04/whey-multiprocessing-doesnt-always-work.html Это было написано не мной, но у этого парня та же проблема, что и у меня. Я благодарен всем, кто пытался мне помочь.

...