У меня есть следующая функция uptime для бота Python Discord:
import datetime
start_time = datetime.datetime.utcnow() # Timestamp of when it came online
@client.command(pass_context=True)
async def uptime(ctx: commands.Context):
now = datetime.datetime.utcnow() # Timestamp of when uptime function is run
delta = now - start_time
hours, remainder = divmod(int(delta.total_seconds()), 3600)
minutes, seconds = divmod(remainder, 60)
days, hours = divmod(hours, 24)
if days:
time_format = "**{d}** days, **{h}** hours, **{m}** minutes, and **{s}** seconds."
else:
time_format = "**{h}** hours, **{m}** minutes, and **{s}** seconds."
uptime_stamp = time_format.format(d=days, h=hours, m=minutes, s=seconds)
await client.say("{} has been up for {}".format(client.user.name, uptime_stamp))
Я развернул этого бота в Heroku (бесплатный уровень) и в течение нескольких дней заметил, что мне никогда не удавалось получить время безотказной работы в течение 24 часов или более (т. Е. Время безотказной работы не сообщалось дней, по-видимому, где-то сбрасывая на полпути, даже если бот был онлайн во всем). Я подумал, что что-то может быть не так с моей функцией, поэтому я добавил операторы print для отладки, с примером времени запуска, примерно так.
Мой вывод показал, что функция способна обрабатывать различия> 1 дня:
The start time is: 2018-09-02 00:00:00
The time now is: 2018-09-03 18:58:03.458852
The delta is 1 day, 18:58:03.458852
The time difference in seconds is: 154683
Hours: 42, remainder: 3483 seconds
Minutes: 58, remainder: 3 seconds
Days: 1, remainder: 18 hours
The time difference is over one day.
**1** days, **18** hours, **58** minutes, and **3** seconds
>>>
Два вопроса:
1) Звучит ли моя функция доступности? и 2) я сейчас читаю, что Heroku может сбрасывать свои бесплатные динамо каждые 24 часа - если это так, как я могу получить функцию безотказной работы, которая фактически работает в течение нескольких дней?
Спасибо!