Как python синхронизирует следующий код? - PullRequest
0 голосов
/ 04 апреля 2020

В следующем коде я запускаю два потока, каждый получает один и тот же счетчик в качестве параметра, и я запускаю их одновременно. Я ожидаю, что результат будет хаотическим c, но, похоже, он синхронизирован. Почему это так?

 import threading


class Counter:
    def __init__(self):
        self.i = 0

    def increment(self):
        self.i += 1

    def get_i(self):
        return self.i


class UnsynchronizedThread(threading.Thread):
    def __init__(self, counter: Counter):
        super().__init__()
        self.counter = counter

    def run(self) -> None:
        for i in range(100):
            self.counter.increment()
            print(f"{threading.get_ident()} - {self.counter.get_i()}")


if __name__ == '__main__':
    counter1 = Counter()
    thread1 = UnsynchronizedThread(counter1)
    thread2 = UnsynchronizedThread(counter1)
    thread1.start()
    thread2.start()

И это вывод

140507778238208 - 1
140507778238208 - 2
140507778238208 - 3
140507769845504 - 4
140507769845504 - 5
140507769845504 - 6
140507769845504 - 7
140507769845504 - 8
140507769845504 - 9
140507769845504 - 10
140507769845504 - 11
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...