Как совершать действие каждые n минут на Python?
Всем привет! На просторах Github нашел интересный телеграм бот с игрой про ферму (вот https://github.com/AglievTim/My_farm/tree/master/Farm ). Суть проста: покупаешь животных, которые дают некое сырье раз в час в N количестве. Однако есть одна проблема. Дело в том, что в этом боте не работает прибавление ресурсов игроку раз в час (так же как и изменение цен на "Рынке", но не суть). В файле database.py я решил, что проблема кроется в отсутствии user_id, которому необходимо накидывать ресурсы. Я исправил это:
# Прибавляет ресурсы игроку
def update_products(event, user_id):
con = sqlite3.connect(DATA, check_same_thread=False)
cursor = con.cursor()
cursor.execute(f'UPDATE profile_information SET eggs = eggs + chicken_count * 10 WHERE user_id = {user_id}')
cursor.execute(f'UPDATE profile_information SET wool = wool + sheep_count * 10 WHERE user_id = {user_id}')
cursor.execute(f'UPDATE profile_information SET milk = milk + cow_count * 12 WHERE user_id = {user_id}')
cursor.execute(f'UPDATE profile_information SET meat = meat + pig_count * 5 WHERE user_id = {user_id}')
con.commit()
con.close()
Но это не помогло. Я заглянул в functions.py и в самом конце есть код:
def main(event):
index = 1
while True:
if index % 5 == 0:
db.change_mart()
db.update_products()
index += 1
sleep(10)
Возможно проблема таится именно тут, хотел бы попросить помощи и разобраться наконец-то. Буду рад помощи, ибо с автором данного творения не нашел способа связаться.
Ответы (1 шт):
В данном случае использовать time.sleep() не лучшая идея, т.к. выполнение другого кода будет остановлено. Лучшее, что я смог придумать использовать встроеный модуль threading. Выглядеть это будет примерно так:
import threading
def add_res():
# Как-то даем ресурсы
# И запускаем повторение функциии add_res через WAIT_SECONDS секунд
threading.Timer(WAIT_SECONDS, add_res).start()
add_res() # Запускаем функию в превый раз, чтобы дальше она сама себя запускала