def test_pipe(Poller): m = Manager() + Poller() a, b = Pipe("a", "b") a.register(m) b.register(m) a = Client(channel=a.channel).register(m) b = Client(channel=b.channel).register(m) m.start() try: assert pytest.wait_for(a, "ready") assert pytest.wait_for(b, "ready") a.fire(write(b"foo")) assert pytest.wait_for(b, "data", b"foo") b.fire(write(b"foo")) assert pytest.wait_for(a, "data", b"foo") a.fire(close()) assert pytest.wait_for(a, "disconnected") b.fire(close()) assert pytest.wait_for(b, "disconnected") finally: m.stop()
def start(self, process=False, link=None): """ Start a new thread or process that invokes this manager's ``run()`` method. The invocation of this method returns immediately after the task or process has been started. """ if process: # Parent<->Child Bridge if link is not None: from circuits.net.sockets import Pipe from circuits.core.bridge import Bridge channels = (uuid(), ) * 2 parent, child = Pipe(*channels) bridge = Bridge(parent, channel=channels[0]).register(link) args = (child, ) else: args = () bridge = None self.__process = Process(target=self.run, args=args, name=self.name) self.__process.daemon = True self.__process.start() return self.__process, bridge else: self.__thread = Thread(target=self.run, name=self.name) self.__thread.daemon = True self.__thread.start() return self.__thread, None
def start(self, sleep=0, log=True, link=None, process=False): group = None target = self.run name = self.__class__.__name__ mode = "P" if process else "T" args = ( sleep, log, mode, ) if process and HAS_MULTIPROCESSING: if link is not None and isinstance(link, Manager): from circuits.net.sockets import Pipe from circuits.core.bridge import Bridge from circuits.core.utils import findroot root = findroot(link) parent, child = Pipe() self._bridge = Bridge(root, socket=parent) self._bridge.start() args += (child, ) self._task = Process(group, target, name, args) self._task.daemon = True if HAS_MULTIPROCESSING == 2: setattr(self._task, "isAlive", self._task.is_alive) self.tick() self._task.start() return self._task = Thread(group, target, name, args) self._task.setDaemon(True) self._task.start()
def start(self): args = (self._running, ) if self._manager is not None: root = findroot(self._manager) parent, child = Pipe() self._bridge = Bridge(root, socket=parent) self._bridge.start() args = ( self._running, child, ) self._process = _Process(target=self.__main__, args=args) self._process.daemon = True if HAS_MULTIPROCESSING == 2: setattr(self._process, "isAlive", self._process.is_alive) self._running.acquire() self._running.value = True self._running.release() self._process.start()