Python 是否可以使用多线程使OpenOpc读取更快的OPC项目?

Python 是否可以使用多线程使OpenOpc读取更快的OPC项目?,python,opc,opc-ua,Python,Opc,Opc Ua,我正在使用OpenOPC opcua libs为opc da(客户端)到opc da(服务器)创建代理。为了让它工作,我正在使用OpenOPC的方法 nodes = c.list('*',recursive=True) 查找opc da服务器的所有节点。 然而,发现10000件物品需要大约3分钟,所以我想让它更快。通过调试一点OpenOPC库,我发现耗时更多的行是 if lowest_level: matches = [exceptional(browser.GetItemID,x)(x)

我正在使用OpenOPC opcua libs为opc da(客户端)到opc da(服务器)创建代理。为了让它工作,我正在使用OpenOPC的方法

nodes = c.list('*',recursive=True)
查找opc da服务器的所有节点。 然而,发现10000件物品需要大约3分钟,所以我想让它更快。通过调试一点OpenOPC库,我发现耗时更多的行是

if lowest_level:  matches = [exceptional(browser.GetItemID,x)(x) for x in matches]
第1096行。我认为一个好的方法是使用池映射进行多线程处理,但是由于decorator的原因,我不想在多线程处理中转换它。是有可能做出这种改进,还是我完全错了这个想法? 我所尝试的是这一点运气都不好,我理解这是错的

matches =pool.map(exceptional,matches)
以下是第103行libs中的例外方法:

def exceptional(func, alt_return=None, alt_exceptions=(Exception,), final=None, catch=None):
   """Turns exceptions into an alternative return value"""

   def _exceptional(*args, **kwargs):
      try:
         try:
            return func(*args, **kwargs)
         except alt_exceptions:
            return alt_return
         except:
            if catch: return catch(sys.exc_info(), lambda:func(*args, **kwargs))
            raise
      finally:
         if final: final()
   return _exceptional

谢谢你的帮助

这就像一开始就有一个数据库并查询整个内容,这对我来说没有什么意义

我编程的OPC UA客户端仅在用户每次在浏览器中展开节点时请求节点一级子节点

您不能使用多线程,在收到前一个请求的答复之前,无法发送新请求