Source code for pystreaming.video.device

import multiprocessing as mp


[docs]class Device: def __init__(self, dfunc, dkwargs, nproc): """Background running device. Args: dfunc (function): Function to run in background. Must have 'shutdown' and 'barrier' as arguments. dkwargs (dict): Kwargs to pass to dfunc. nproc (int): Number of background processes to launch. """ assert isinstance(dkwargs, dict) # we only pass in arguments as kwargs assert nproc > 0 self.dfunc, self.dkwargs, self.nproc = dfunc, dkwargs, nproc self.barrier = mp.Barrier(nproc + 1, timeout=3) self.shutdown = mp.Event() dkwargs["barrier"] = self.barrier dkwargs["shutdown"] = self.shutdown self.processes = []
[docs] def start(self): """Start background processes. Does nothing if already started.""" if self.processes != []: return for _ in range(self.nproc): self.processes.append(mp.Process(target=self.dfunc, kwargs=self.dkwargs)) for ps in self.processes: ps.daemon = True ps.start() self.barrier.wait()
[docs] def stop(self): """Stop background processes. Does nothing if already stopped.""" if self.processes == []: return self.shutdown.set() for ps in self.processes: ps.join() self.processes = [] self.shutdown.clear()