Два асинхронных цикла

Заранее извиняюсь за мои познания, я новичок в асинхронности. Я делаю бота, который считывает, когда человек заходит в голосовой канал и когда выходит. Он должен за каждые 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

→ Ссылка