Запуск несколько ассинхронных функций вместе на python
День добрый! Задача состоит в том, чтобы запустить несколько асинхронных функции разом.
Сейчас у меня только две функции: первая открывает сокет и непрерывно получает данные из этого соединения; вторая периодически делает запросы к другому серверу и отправляет в тг канал ответ на сделанный запрос и данные, которые мы получали в первой функции.
Проблема в том, что, возможно, нужно будет открывать еще сокеты и писать функции подобные второй. Можно ли выполнять асинхронные функции пареллельно? Пробовал совместить asyncio c multiprocessing и threading. Путного ничего не вышло у меня.
Вот что сейчас написал
import asyncio, json, time, aiohttp, websockets
async def func2(data):
async with aiohttp.ClientSession() as session:
async with session.post(url='...', json=data) as response:
response = await response.json()
# Обрабатываю response
async def func1():
url = f'...'
start_time = time.time()
async with websockets.connect(url) as client:
while True:
data = json.loads(await client.recv())
# Обрабатываю data
if time.time() - start_time > 5*60:
await gen_tasks()
start_time = time.time()
async def gen_tasks():
tasks = []
for i in ...:
data = {...}
tasks.append(asyncio.create_task(func2(data)))
for task in tasks:
await task
asyncio.run(func1())
Ответы (1 шт):
Содержимое gen_tasks обернул в цикл while и в конец цикла довавил await asyncio.sleep(300)
В конец добавил функцию, создающую задачи
async def main():
t1 = asyncio.create_task(func1())
t2 = asyncio.create_task(gen_tasks())
await t1
await t2
asyncio.run(main())