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

1

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

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

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

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

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

  • 1
    Я понимаю, что это не ответ на ваш вопрос, но звучит так, как будто вы могли бы извлечь выгоду из синхронизированного класса очереди Python, разработанного специально для такого типа ситуаций.
  • 0
    «Должен ли работник стремиться к выпуску приобретений в соответствии с какими-либо выдающимися выпусками на семафоре?»: будут ли элементы после элемента TERMINATE?
Показать ещё 3 комментария
Теги:
multithreading
semaphore

1 ответ

1
Лучший ответ

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

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

  • 0
    Это просто ценность? У объектов семафоров в Python есть связанные условия, блокировки, списки официантов и т. Д. Я хотел проверить, что от всего этого тоже можно безопасно отказаться. Я не был уверен, могут ли детали реализации использовать другие ресурсы, которые могут не очищаться должным образом, когда счетчик остается> 0.
  • 0
    Что ж, внутренняя бухгалтерия, связанная с семафором, не должна зависеть от значения семафора. Я довольно уверен, что никакой «очистки до нуля» не требуется.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню