Добрый день.
Вот код opcua clientа:
import asyncio
import sys
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.Semaphore(value=1000)
from asyncua import Client as ClientASY
url = "opc.tcp://127.0.0.1:49320"
async def create_tags_dict(path, client):
tag_list = dict()
list = await client.get_node(path).get_variables()
for i in list:
tag_list[i.nodeid.Identifier] = i
return tag_list
async def get_value_from_dict(address, client):
value = await client.get_node(address).get_value()
return value
async def main():
async with ClientASY(url=url) as clientAsy:
node_path = "ns=2;s=TEST.PLC1"
Tags_List = await create_tags_dict(node_path, clientAsy) # Формируется примерно 1.5секунд
await asyncio.sleep(2)
tasks = [] # список с тасками для выгрузки значений тегов
for key, value in Tags_List.items():
tasks.append(asyncio.create_task(get_value_from_dict(value, clientAsy)))
RESULT = await asyncio.gather(*tasks)
while True:
for result in RESULT:
print(result)
await asyncio.sleep(3)
if __name__ == "__main__":
asyncio.run(main())
Вопрос вот в чем: в Tags_List я щзаписываю все теги из node_path = "ns=2;s=TEST.PLC1", там находится примерно 19000 тегов.
Далее я формирую список "tasks" с тасками для получения значения тегов и затем записываю результат тасков в RESULT.
Хоть все делается асинхронно, все равно очень долго, RESULT формируется примерно за 4 секунды.
Что я делаю не так? Или сама библиотека не способна работать быстрее?