############################################################################### # LokyProcess implementation # # authors: Thomas Moreau and Olivier Grisel # # based on multiprocessing/process.py (17/02/2017) # import sys from multiprocessing.context import assert_spawning from multiprocessing.process import BaseProcess class LokyProcess(BaseProcess): _start_method = "loky" def __init__( self, group=None, target=None, name=None, args=(), kwargs={}, daemon=None, init_main_module=False, env=None, ): super().__init__( group=group, target=target, name=name, args=args, kwargs=kwargs, daemon=daemon, ) self.env = {} if env is None else env self.authkey = self.authkey self.init_main_module = init_main_module @staticmethod def _Popen(process_obj): if sys.platform == "win32": from .popen_loky_win32 import Popen else: from .popen_loky_posix import Popen return Popen(process_obj) class LokyInitMainProcess(LokyProcess): _start_method = "loky_init_main" def __init__( self, group=None, target=None, name=None, args=(), kwargs={}, daemon=None, ): super().__init__( group=group, target=target, name=name, args=args, kwargs=kwargs, daemon=daemon, init_main_module=True, ) # # We subclass bytes to avoid accidental transmission of auth keys over network # class AuthenticationKey(bytes): def __reduce__(self): try: assert_spawning(self) except RuntimeError: raise TypeError( "Pickling an AuthenticationKey object is " "disallowed for security reasons" ) return AuthenticationKey, (bytes(self),)