Два асинхронных цикла
Заранее извиняюсь за мои познания, я новичок в асинхронности. Я делаю бота, который считывает, когда человек заходит в голосовой канал и когда выходит. Он должен за каждые 10 секунд в голосовом канале, давать 1 коин, который я записываю в базу данных. А каждую 1 секунду, должен добавлять единицу к другой переменной, тоже в базу данных. Я написал код, но он к сожалению не работает. Работает только первый цикл, а должно работать одновременно два цикла:
@bot.event
async def on_voice_state_update(member, before, after):
cursor = connection.cursor()
print(member)
print(before.channel)
print(after.channel)
if after.channel!='None':
while True:
if after.channel != 'None':
cursor.execute(f'UPDATE users SET voicetime = voicetime + {1} WHERE id={member.id}')
connection.commit()
await asyncio.sleep(1)
else:
break
while True:
if after.channel != 'None':
cursor.execute(f'UPDATE users SET cash = cash + {1} WHERE id={member.id}')
connection.commit()
await asyncio.sleep(10)
cursor.execute("SELECT * FROM users;")
print(cursor.fetchall())
else:
break
cursor.close()
Ответы (1 шт):
Автор решения: Degri
→ Ссылка
Вы могли бы создать 2 функции с этими цыклами и запустить их с помощью ассинхронности например:
from threading import Thread
def first_while():
while True:
cursor.execute(f'UPDATE users SET voicetime = voicetime + {1} WHERE id={member.id}')
connection.commit()
await asyncio.sleep(1)
def second_while():
while True:
cursor.execute(f'UPDATE users SET cash = cash + {1} WHERE id={member.id}')
connection.commit()
await asyncio.sleep(10)
cursor.execute("SELECT * FROM users;")
print(cursor.fetchall())
t1 = Thread(target=first_while)
t2 = Thread(target=second_while)
t1.start()
t2.start()
t1.join()
t2.join()
P.s. не забудьте передать аргументы в функцию, например для записи в базу данных member.id