Очистка семафора в Python - PullRequest
       4

Очистка семафора в Python

1 голос
/ 06 сентября 2011

Я использую семафор, чтобы передать работу другому потоку в Python. То есть главный поток поместит элемент в очередь, а затем вызовет метод семафора release; рабочий поток вызовет acquire на семафоре, а затем вытолкнет элемент из очереди для работы.

Есть также специальный элемент TERMINATE, который мастер может поставить в очередь, который дает команду работнику завершиться. У меня вопрос: должен ли работник стремиться к выдаче acquire s, чтобы сопоставить любые выдающиеся release s на семафоре, прежде чем он завершится? Семафор принадлежит рабочему объекту и больше не используется после завершения потока; однако этот процесс может быть долгоживущим и в будущем создаст много рабочих объектов / потоков / семафоров.

  1. Безопасно ли оставлять семафор с ненулевым счетом? (Я подозреваю, что это так, но я хочу перепроверить.)

  2. Независимо от того, безопасно ли это, вы (субъективно) думаете, что «лучше» полностью очистить семафор перед окончанием?

Меня больше всего интересует поведение семафора в Python (а точнее, CPython). Однако, любая общая мудрость относительно семафоров в других языках, таких как pthreads Си, также будет приветствоваться.

1 Ответ

1 голос
/ 06 сентября 2011

# 1: Да, безопасно отказаться от семафора с ненулевым счетом.В конце концов, это просто значение.

# 2: лучше уменьшить объем кода.Стремитесь написать минимальное количество чистого кода для правильной реализации.

...