У меня есть 3 основные задачи:
- задача получения веб-сокета, которая в бесконечном цикле while получает данные и помещает их в очередь.
- сохранение задач данных, которые получают данные из очереди, и сохранение их в базе данных.
- многие задачи получения http (более 100 задач), которые получают данные методом POST и помещать данные в очередь.
проблема в том, что когда я запускаю код, задачи http запускаются раньше других задач и не позволяют другим выполнять их до тех пор, пока задачи http не будут выполнены полностью.
я хочу знать, есть ли способ выполнить все задачи, не блокируя другие задачи ?
мой код, как показано ниже:
async def websocket_receive(queue:asyncio.Queue):
websocket.connect()
while True:
data= await websocke.receive()
print("ressive data websocket")
await queue.put(data)
async def save_data(queue:asyncio.Queue):
while True:
print("save data")
data = await queue.get()
# processing save data to data base sql
await save_to_Sql(data)
async def single_http_request(parameter,queue:asyncio.Queue):
# function that gets http data
for item in parameter:
asyncio.sleep(0.1)
print(" http data")
data=await http_post_request(item ,post)
await queue.put(data)
async def all_http_request(parameters,queue:asyncio.Queue):
batch_size=10
tasks=[asyncio.create_task(single_http_request(parameters[i:i+batch_size],queue) for i in range(0,len(parameters),batch_size)]
task_group= asyncio.gather(*tasks)
await task_group
async def get_lost_data(parameters,queue:asyncio.Queue):
await ll_http_request(parameters,queue)
queue = asyncio.Queue()
get_lost_data_task = asyncio.create_task(get_lost_data(parameters,queue))
ressive_task=asyncio.create_task(websocket_receive(queue))
Save_to_Database_task =asyncio.create_task(save_data(queue))
websoket_tasks= asyncio.gather(ressive_task,Save_to_Database_task)
await websoket_tasks
await get_lost_data_task
каждая задача http занимает от 3 до 10 секунд.
после запуска кода в консоли только что распечатывается:
http data
http data
http data
http data
.
.
.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ut-locking
Мобильная версия