Python global threading.condition () и использовать в нескольких модулях - PullRequest
0 голосов
/ 19 октября 2011

РЕДАКТИРОВАТЬ: проблема, с которой я столкнулся, не была связана со структурой моей программы.Это была маршрутизация FAPWS3, в которой была выбрана похожая, строго названная функция.

У меня большая программа, распределенная по нескольким файлам.Мне нужно использовать функцию блокировки threading.condition () для этих файлов.Вот пример того, что я пытаюсь сделать.В производственной среде я не получаю никаких ошибок, но состояние блокировки, кажется, не разделяется (я могу получить в одном потоке и получить в другом потоке без освобождения предыдущего).

main.py

import servera, serverb

# some code that deploys server-a and server-b as threads

constants.py

import threading
mylock = threading.Condition()

servera.py

from constants import mylock

Class ServerA():
  def doSomething():
    mylock.acquire()
    # do something
    mylock.release()

serverb.py

from constants import mylock

Class ServerB():
  def doSomethingElse():
    mylock.acquire()
    # do something else
    mylock.release()

1 Ответ

0 голосов
/ 19 октября 2011

Если я правильно помню, при импорте модуля Python запускает его. Поэтому я думаю, что вы получаете разные mylock в каждом файле. Вы можете попробовать распечатать его и посмотреть на идентификаторы.

Ссылка Джеффса, размещенная ниже, очищает:

Поскольку существует только один экземпляр каждого модуля, любые изменения, внесенные в объект модуля, отражаются повсеместно.

Так что это не проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...