es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiar de python-opcua a opcua-asyncio.

Ahora tengo un paquete con una clase que se ve así:

class Opc(object):
    def __init__(self):
        client = Client("server_url")
        client.connect()

opc = Opc()

Ahora quiero usar la biblioteca opcua-asyncio, por lo que necesito usar una función asíncrona para conectarme al servidor, pero no puedo esperarla desde el método init.
¿Cómo puedo conectarme al servidor usando la función de conexión asíncrona después de que se importe mi paquete?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para conectarse al servidor utilizando la biblioteca OPCUA-asyncio después de importar el paquete, puedes crear una función asíncrona fuera de la clase Opc y llamarla por separado. Aquí tienes un ejemplo:

    from opcua import Client
    import asyncio
    
    class Opc(object):
        def __init__(self):
             self.client = None
    
        async def connect(self):
            self.client = Client("server_url")
            await self.client.connect()
    
    async def init_opc():
        opc = Opc()
        await opc.connect()
        return opc
    
    # Esto se puede llamar en cualquier lugar después de importar el paquete
    async def main():
        opc = await init_opc()
        # Ahora puedes usar el cliente opc, por ejemplo:
        variable = opc.client.get_node("ruta/a/variable")
        value = await variable.read_value()
        print(value)
    
    # Para ejecutar la función asíncrona:
    asyncio.run(main())
    

    En este ejemplo, creamos una función asíncrona init_opc que crea una nueva instancia de la clase Opc y espera a su método asíncrono connect. Luego, podemos llamar a init_opc cuando necesitemos conectarnos al servidor OPC UA.

    Ten en cuenta que, dado que estamos utilizando una función asíncrona para conectarnos al servidor, necesitamos ejecutar la función utilizando asyncio.run.

Comments are closed.