Форум сайта python.su
2
Как в python заблокировать все потоки кроме токо который вызвал блокировку, и основного, средствами python(модуль threading).
Офлайн
18
семафорами
Офлайн
2
adrayМожно пример?
семафор
Офлайн
20
Можно пример где возникает описанная необходимость?
Офлайн
2
Soteric
Можно пример где возникает описанная необходимость?
SotericПример: есть GUI приложение оно в определенный момент может потребовать длительную работу с общими рес-сами, допустим 1 мин.
Можно пример где возникает описанная необходимость?
Офлайн
20
Все длительные операции, включая операции которые потенциально могут быть заблокированы, выносятся в отдельный поток. В этом случае гуи не виснет, а задача, выделенная в этот отдельный поток, ждет когда освободятся ресурсы. Не уловил зачем здесь что-то блокировать?
Офлайн
63
Да не парься. Выведи просто сообщение или процент выполнения. Привяжи к процессу и периодически делай update_idletasks(), чтобы процент обновлялся.
P.S. Если ты говоришь, что доступ к одному ресурсу, то что ты хочешь дать пользователю делать???
Любое изменение приведет к похерению целостности данных - посему пусть смотрит на проценты и ждет…
Офлайн
18
def f(name): with sem: for i in range(10): print('from {0} with love'.format(name)) time.sleep(1) ... def run(name): t = threading.Thread(target = lambda: f(name)) t.daemon = True t.start() ... >>> sem = threading.Semaphore(2) >>> run('hell'); run('russia'); run('thread0')
Отредактировано adray (Ноя. 7, 2012 13:31:07)
Офлайн
2
Всем спасибо, а нет ли где русской док-ции по модулю threading?
А то много вопросов возникакет, а с инглишом у меня все совсем плохо.
Офлайн
14
adrayУ меня идею взял?t = threading.Thread(target = lambda: f(name))
Офлайн