Наименование темы Python3 threading.Timer Темы проблематично c в больших количествах? - PullRequest
0 голосов
/ 27 апреля 2020

Я использую threading.Timer объект в Python3 для запуска переключения изображения (например, слайд-шоу изображений для цифровой фоторамки) в очень простом полноэкранном окне Pygame.

Ниже код в самом конце не функциональный, а просто иллюстрация, чтобы дать вам суть. Поток таймера создается и запускается, после его завершения логическое значение self.signal_switch_image устанавливается на True, что вызывает переключение изображения. Мне приходится каждый раз создавать новый поток, так как поток не может быть перезапущен, поэтому при новом назначении старый сборщик мусора (по крайней мере, я так думаю). Работает как шарм.

Чтобы проверить, действительно ли старая неназначенная нить действительно уничтожена, я напечатал threading.enumerate(), чтобы убедиться, что я не создаю миллион новых нитей. Теоретически этот скрипт предназначен для запуска в течение очень длительного времени (день или дольше). Вывод, который вы можете увидеть здесь ниже:

[<_MainThread(MainThread, started 4148)>, <Timer(Thread-1, started 5300)>]
[<_MainThread(MainThread, started 4148)>, <Timer(Thread-2, started 11224)>]
[<_MainThread(MainThread, started 4148)>, <Timer(Thread-3, started 9116)>]
[<_MainThread(MainThread, started 4148)>, <Timer(Thread-4, started 4724)>]
[<_MainThread(MainThread, started 4148)>, <Timer(Thread-5, started 7856)>]
[<_MainThread(MainThread, started 4148)>, <Timer(Thread-6, started 6728)>]
[<_MainThread(MainThread, started 4148)>, <Timer(Thread-7, started 13512)>]

Теперь вот мой вопрос, и я почти уверен, что это глупый вопрос, но я бы предпочел задать его в любом случае, поскольку я даже не знаю, что искать в Dr. Google.

Вы можете видеть, что у каждой новой темы есть следующее последовательное целое число в конце имени. Должен ли я беспокоиться о том, что число в конце заголовка темы становится слишком большим, например, Thread-9123475981234750182374018243761087235081237? У меня было много странных ошибок, когда я работал программистом-хобби, и если это было бы проблемой, это было бы кошмаром для отладки, поэтому я скорее спрашиваю сейчас, пока заметил это.

Спасибо очень заранее за то, что нашли время пострадать от невежества; -)

Береги себя в эти странные времена ...

def run(self):
    size = (0, 0)
    screen = pygame.display.set_mode(size, FULLSCREEN)

    running = True

    while running:
        if self.time2switch:
            # Changes the image
            self.change_image()

            # Creates new Timer thread
            self.time2switch = False
            timer = th.Timer(self.time_delay, self.signal_switch_image)
            timer.start()
            print(th.enumerate())

        self.img = pygame.image.load(self.imgpath)

        screen.fill(BLACK)
        screen.blit(self.img, centre_coord)
        pygame.display.flip()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...