Я использую 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