Tinkoff / invest-openapi

Документация для Тинькофф Инвестиции OpenApi
https://tinkoff.github.io/invest-openapi/
456 stars 52 forks source link

Запуск streaming (асинхронной функции) в нескольких потоках Thread #660

Closed artemm785 closed 2 years ago

artemm785 commented 2 years ago

Формирую скрипт, с несколькими потоками, в которых работает асинхронная функция подписки на свечи. Есть рабочий пример кода:

token_prod = 'xxxxx'
figis=['BB00000000','BB00000001']

async def main_1(token_prod,figi):
    async with ti.Streaming(token_prod) as streaming:
        await streaming.candle.subscribe(figi, ti.CandleResolution.min1)
        async for event in streaming:
            print(event.payload.figi,event.payload.c)

        return

def launch(token_prod,figi):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(main_1(token_prod,figi))
    loop.close()

for index in range(2):
    t = threading.Thread(target=launch,args=(token_prod, figis[index]))
    t.start()

Что здесь не так? Этот пример работает! А через какой-то промежуток времени или при новом запуске - перестает. Потом это код опять начинает работать. Зависимости я так и не нашел. Причем нет ошибок, в консоли на строке ‘async with ti.Streaming…..’ просто ожидает бесконечно прихода свечи, которая так и не приходит. Есть идеи, комментарии?

AlexanderVolkovTCS commented 2 years ago

Лучше задать этот вопрос в репозитарий sdk, каким вы пользуетесь.