Перезапуск асинхронной функции

Уважаемые знатоки, нужна ваша помощь, переписал бота для торговли игровыми вещами с node.js на python (первый опыт работы с ним), вроде все работает, но, для корректного обновления базы вещей, нужно вызывать определенную функцию раз в 20-30 минут, то есть, при старте бота, вызываются определенные функции и после 20-30 минут работы, нужно перезапустить определенную функцию, как это сделать?

async def main():
    try:
    # Удаляем все ордера
        
    # Получаем вещи с loot.farm
    
    # Получаем вещи с маркета
        # Фильтруем вещи по (мин/макс цена, процент профита, количеству вещей на лутфарм)
        # Разбиваем на части по 100
        # Получаем цены вещей из MassInfo

    # Выставляем ордера
    
    await deleteOrders()
    await asyncio.sleep(0.5)
    await getItemsLootFarm()
    await asyncio.sleep(0.5)
    await getItemsMarket()
    await asyncio.sleep(0.5)
    await arrayChunk(profitItemsList)
    await asyncio.sleep(0.5)
    while True:
        try:
            # print(f"START")
            for i in profitItemsList:
                # {'id': '4458512696-0-Lightweight Chest Plate', 'maxBuyPrice': '39.79', 'percent': '36.84'}
                classid = profitItemsList[i]['id'].split('-')[0]
                instanceid = profitItemsList[i]['id'].split('-')[1]
                market_hash_name = profitItemsList[i]['id'].split('-')[2]
                maxBuyPrice = profitItemsList[i]['maxBuyPrice']
                maxBuyPrice = float(maxBuyPrice)
                percent = profitItemsList[i]['percent']
                if marketBestOffer.get(market_hash_name):
                    best_offer = marketBestOffer[market_hash_name]['best_offer']
                    if best_offer < round(maxBuyPrice*100):
                        if len(oldOrderPrice) == 0 or oldOrderPrice.get(market_hash_name) == None or round(best_offer)+1 != oldOrderPrice[market_hash_name]:
                            await processOrder(classid, instanceid, market_hash_name, round(best_offer)+1, round(best_offer))
                            continue
                        # print(f"{oldOrderPrice[market_hash_name]}-{round(best_offer)+1}")
                    else:
                        await processOrder(classid, instanceid, market_hash_name, 0, round(best_offer))
                        continue
                            # print(f"{profitItemsList[i]}")
            print(f" ============== [END] ==============")
            await asyncio.sleep(1.0)
            marketBestOffer.clear()
            await arrayChunk(profitItemsList)
        except Exception as e:
            print(str(f"[main:while] {traceback.format_exc()}"))
except Exception as e:
    print(str(f"[main] {traceback.format_exc()}"))

if __name__ in "__main__":
    asyncio.run(main())

Через 20-30 минут нужно вызвать функцию deleteOrders()

UPD: Так как на момент написание поста была глубокая ночь, я не верно "поставил" конечную задачу, нужно не просто вызвать deleteOrders(), а нужно вызвать по сути начало скрипта

await deleteOrders()
await asyncio.sleep(0.5)
await getItemsLootFarm()
await asyncio.sleep(0.5)
await getItemsMarket()
await asyncio.sleep(0.5)
await arrayChunk(profitItemsList)
await asyncio.sleep(0.5)

Ответы (1 шт):

Автор решения: user2240578

asyncio.ensure_future сразу же запускает корутину в фоне

→ Ссылка