Найти - Пользователи
Полная версия: Блокировка не всех потоков
Начало » Python для новичков » Блокировка не всех потоков
1 2
mironich
Как в python заблокировать все потоки кроме токо который вызвал блокировку, и основного, средствами python(модуль threading).
adray
семафорами
mironich
adray
семафор
Можно пример?
Как понял семафор отличаеться от обычной блокировки только наличием счетчика макс. допустимого кол-ва потоков для доступа к рес-су?
Soteric
Можно пример где возникает описанная необходимость?
mironich
Soteric
Можно пример где возникает описанная необходимость?
Soteric
Можно пример где возникает описанная необходимость?
Пример: есть GUI приложение оно в определенный момент может потребовать длительную работу с общими рес-сами, допустим 1 мин.
Вот входит в блокировку, и на это время стопоряться все потоки вкл. главный, интерфейс соотвественно виснет.
Soteric
Все длительные операции, включая операции которые потенциально могут быть заблокированы, выносятся в отдельный поток. В этом случае гуи не виснет, а задача, выделенная в этот отдельный поток, ждет когда освободятся ресурсы. Не уловил зачем здесь что-то блокировать?
4kpt
Да не парься. Выведи просто сообщение или процент выполнения. Привяжи к процессу и периодически делай update_idletasks(), чтобы процент обновлялся.

P.S. Если ты говоришь, что доступ к одному ресурсу, то что ты хочешь дать пользователю делать???
Любое изменение приведет к похерению целостности данных - посему пусть смотрит на проценты и ждет…
adray
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')

Как уже верно отметили @4kpt и @Soteric, такая блокировка скорее всего не нужна - она может понадобиться, если одновременное выполнение main и thread0 потокобезопасно, а thread0 и threadN - нет
mironich
Всем спасибо, а нет ли где русской док-ции по модулю threading?
А то много вопросов возникакет, а с инглишом у меня все совсем плохо.
odnochlen
adray
t = threading.Thread(target = lambda: f(name))
У меня идею взял?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB