У меня есть чат-робот, управляемый событиями, и я пытаюсь реализовать защиту от спама. Я хочу заставить пользователя замолчать, который некоторое время ведет себя плохо, не блокируя остальную часть приложения.
Вот что не работает:
if user_behaving_badly():
ban( user )
time.sleep( penalty_duration ) # Bad! Blocks the entire application!
unban( user )
В идеале, если user_behaving_badly () имеет значение true, я хочу запустить новый поток, который ничего не делает, кроме как заблокировать пользователя, затем ненадолго спать, разблокировать пользователя, а затем поток исчезает.
В соответствии с этим я могу достичь своей цели, используя следующее:
if user_behaving_badly():
thread.start_new_thread( banSleepUnban, ( user, penalty ) )
«Простой» обычно является показателем «хорошо», и это довольно просто, но все, что я слышал о потоках, говорит о том, что они могут вас укусить неожиданными способами. Мой вопрос: Есть ли лучший способ запустить простой цикл задержки, не блокируя остальную часть приложения?