Запуск новой асинхронной функции, пока старая работает - PullRequest
1 голос
/ 06 октября 2019

Функция all создает список акций, у которых нет доступных акций. Затем он запускает alert , функцию зацикливания, чтобы предупредить меня, когда акция станет доступной. Мне нужно запустить все эти циклы alert одновременно, но all ждет, пока первая акция станет доступной, прежде чем начать следующий цикл.

Я пытался использовать потоки для создания потока для каждой акции, но я не могу дождаться Thread.start ()

async def all(self, ctx):
   stocks = requests.get(f'https://api.torn.com/torn/? 
   selections=stocks&key={api}').json()['stocks']
   zero = []
   acronymz = []
    for items in stocks:
        if stocks[items]['available_shares'] == 0:
            zero.append(items)
            acronymz.append(stocks[items]['acronym'])

    await ctx.send(f'Zero: {zero}')

    for acronyms in zero:
        print(acronyms)
        # Thread(target=alert, args=(ctx, acronyms)).start()
        await alert(ctx, acronyms)
        # await asyncio.sleep(0.5)


async def alert(ctx, items):
    stocks = requests.get(f'https://api.torn.com/torn/?selections=stocks&key={api}').json()['stocks'][items]
    if stocks['available_shares'] == 0:
        await ctx.send(f'I am now watching {stocks["acronym"]}. I will let you know when there are shares available!')
    while stocks['available_shares'] == 0:
        stocks = requests.get(f'https://api.torn.com/torn/?selections=stocks&key={api}').json()['stocks'][items]
        print(stocks)
        await asyncio.sleep(5)
    await ctx.send(f'There are {stocks["available_shares"]} in {stocks["acronym"]}')

stocks = https://pastebin.com/FhuR4d4R ["stocks"]

1 Ответ

0 голосов
/ 06 октября 2019

Вы можете запланировать задачи для цикла событий без немедленного await их выполнения. Вот пример использования asyncio.gather

await asyncio.gather(*(alert(ctx, acronyms) for acronyms in zero))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...