def start(self, timeout=None):
<EOL>if self.daemon:<EOL><INDENT>daemonic = True<EOL><DEDENT>else:<EOL><INDENT>daemonic = False<EOL><DEDENT>pargs = self._pargs.copy()<EOL>pargs.pop('<STR_LIT>', None)<EOL>self._process = multiprocessing.Process(**pargs)<EOL>self._process.daemon = daemonic<EOL>if self.is_alive():<EOL><INDENT>self.shutdown(join=True, timeout=timeout)  <EOL>self.start(timeout=timeout)  <EOL><DEDENT>else:<EOL><INDENT>self._process.start()<EOL><DEDENT>if self.started.wait(timeout=timeout):  <EOL><INDENT>return True<EOL><DEDENT>else:<EOL><INDENT>return False<EOL><DEDENT>
Start child process
:param timeout: the maximum time to wait for child process to report it has actually started.
None waits until the context manager has been entered, but update might not have been called yet.