Local and remote NodesΒΆ

"""
Local and remote Nodes

This example demonstrates the use of Node instances both in the local process
and in a remote process. In either case, the way we interact with the Node is
essentially the same.
"""

from pyacq import create_manager, ImageViewer, WebCamAV
from pyqtgraph.Qt import QtCore, QtGui
import time
import pyqtgraph as pg





def dev_remote_viewer_local():
    man = create_manager()

    # this create the dev in a separate process (NodeGroup)
    nodegroup = man.create_nodegroup()
    
    dev = nodegroup.create_node('WebCamAV', name = 'cam0')
    dev.configure(camera_num = 0)
    dev.output.configure(protocol = 'tcp', interface = '127.0.0.1', transfermode = 'plaindata')
    dev.initialize()

    #view is a Node in local QApp
    app = pg.mkQApp()

    viewer = ImageViewer()
    viewer.configure()
    viewer.input.connect(dev.output)
    viewer.initialize()
    viewer.show()

    dev.start()
    viewer.start()

    app.exec_()


def dev_local_viewer_local():
    # no manager
    # device + view is a Node in local QApp
    # Nodes are controled directly
    
    app = pg.mkQApp()
    
    dev = WebCamAV()
    dev.configure(camera_num = 0)
    dev.output.configure(protocol = 'tcp', interface = '127.0.0.1', transfermode = 'plaindata')
    dev.initialize()


    viewer = ImageViewer()
    viewer.configure()
    viewer.input.connect(dev.output)
    viewer.initialize()
    viewer.show()

    dev.start()
    viewer.start()

    app.exec_()
 
 
def dev_remote_viewer_remote():
    # no QApp all Nodes are remoted even the viewer.
    # note that dev and viewer are in the same NodeGroup
    # so they are in the same process
    
    man = create_manager()
    nodegroup = man.create_nodegroup()
    
    dev = nodegroup.create_node('WebCamAV', name = 'cam0')
    dev.configure(camera_num = 0)
    dev.output.configure(protocol = 'tcp', interface = '127.0.0.1', transfermode = 'plaindata')
    dev.initialize()
    
    viewer = nodegroup.create_node('ImageViewer', name = 'viewer0')
    viewer.configure()
    viewer.input.connect(dev.output)
    viewer.initialize()
    viewer.show()

    dev.start()
    viewer.start()
    
    
    time.sleep(10.)


# uncomment one if this 3 lines and compare the process number
dev_remote_viewer_local()
#dev_local_viewer_local()
#dev_remote_viewer_remote()