Python Threading. Как мне заблокировать тему?
Я пытаюсь понять основы многопоточности и параллелизма. Я хочу простой случай, когда два потока неоднократно пытаются получить доступ к одному общему ресурсу.
Код:
<code>import threading class Thread(threading.Thread): def __init__(self, t, *args): threading.Thread.__init__(self, target=t, args=args) self.start() count = 0 lock = threading.Lock() def incre(): global count lock.acquire() try: count += 1 finally: lock.release() def bye(): while True: incre() def hello_there(): while True: incre() def main(): hello = Thread(hello_there) goodbye = Thread(bye) while True: print count if __name__ == '__main__': main() </code>
Итак, у меня есть два потока, оба пытаются увеличить счетчик. Я думал, что если нить 'A'; называетсяincre()
,lock
будет установлен, предотвращая "B"; от доступа до «A»; выпустил.
Запуск дает понять, что это не так. Вы получаете все случайные приращения данных.
Как именно используется объект блокировки?
Изменить. Кроме того, я пытался установить блокировки внутри потоковых функций, но все равно не повезло.