Вопрос

Если нет, то есть ли способ гарантировать безопасность потока путем программирования определенным образом?

Чтобы уточнить, говоря о «Threadsafe», я имею в виду потоки Python, а не потоки уровня ОС.

Это было полезно?

Решение

Все зависит от взаимодействия между вашим кодом цинтона и GIL Python, как подробно задокументировано здесь. Анкет Если вы не делаете ничего особенного, Cython-генерируемый код будет уважать GIL (как и расширение C-кодирования C, которое не использует макросы, выделяющие GIL); Это делает такой код «как Threadsafe, как код Python», что не так много, но его легче обрабатывать, чем код полностью свободного нагрузки (вам все еще нужно архитектировать многопоточное сотрудничество и синхронизацию, в идеале с экземплярами очередей, но, возможно, с блокировка & c).

Код, который отказался от GIL и еще не приобрел его обратно, не должен каким-либо образом взаимодействовать со временем выполнения Python и объектами, которые использует время выполнения Python-это касается цинтона так же, как и для расширений C-кодирования. Прай, конечно, заключается в том, что такой код может работать на отдельном ядре (до тех пор, пока он не должен синхронизировать или каким -либо образом не общаться со временем выполнения Python, конечно).

Другие советы

Глобальная блокировка интерпретатора Python означает, что только один поток может быть активен в интерпретаторе в любое время. Однако после того, как управление будет передано в расширение C, другой поток может быть активным внутри интерпретатора. Можно создать несколько потоков, и ничто не предотвращает прерывание потока в середине критического раздела. Не

На защищенном потоке код может быть реализован в интерпретаторе, поэтому ничто в коде, работающем в интерпретаторе, не безопасно. Код в модулях C или Pyrex все еще может изменять структуры данных, которые видны коду Python. Настоящий код может, конечно, также иметь проблемы с потоком с нативными структурами данных.

Вы не можете гарантировать безопасность потока помимо использования соответствующего дизайна и синхронизации - GIL на интерпретаторе Python не существует существенно меняет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top