1############################################################################### 
    2# LokyProcess implementation 
    3# 
    4# authors: Thomas Moreau and Olivier Grisel 
    5# 
    6# based on multiprocessing/process.py  (17/02/2017) 
    7# 
    8import sys 
    9from multiprocessing.context import assert_spawning 
    10from multiprocessing.process import BaseProcess 
    11 
    12 
    13class LokyProcess(BaseProcess): 
    14    _start_method = "loky" 
    15 
    16    def __init__( 
    17        self, 
    18        group=None, 
    19        target=None, 
    20        name=None, 
    21        args=(), 
    22        kwargs={}, 
    23        daemon=None, 
    24        init_main_module=False, 
    25        env=None, 
    26    ): 
    27        super().__init__( 
    28            group=group, 
    29            target=target, 
    30            name=name, 
    31            args=args, 
    32            kwargs=kwargs, 
    33            daemon=daemon, 
    34        ) 
    35        self.env = {} if env is None else env 
    36        self.authkey = self.authkey 
    37        self.init_main_module = init_main_module 
    38 
    39    @staticmethod 
    40    def _Popen(process_obj): 
    41        if sys.platform == "win32": 
    42            from .popen_loky_win32 import Popen 
    43        else: 
    44            from .popen_loky_posix import Popen 
    45        return Popen(process_obj) 
    46 
    47 
    48class LokyInitMainProcess(LokyProcess): 
    49    _start_method = "loky_init_main" 
    50 
    51    def __init__( 
    52        self, 
    53        group=None, 
    54        target=None, 
    55        name=None, 
    56        args=(), 
    57        kwargs={}, 
    58        daemon=None, 
    59    ): 
    60        super().__init__( 
    61            group=group, 
    62            target=target, 
    63            name=name, 
    64            args=args, 
    65            kwargs=kwargs, 
    66            daemon=daemon, 
    67            init_main_module=True, 
    68        ) 
    69 
    70 
    71# 
    72# We subclass bytes to avoid accidental transmission of auth keys over network 
    73# 
    74 
    75 
    76class AuthenticationKey(bytes): 
    77    def __reduce__(self): 
    78        try: 
    79            assert_spawning(self) 
    80        except RuntimeError: 
    81            raise TypeError( 
    82                "Pickling an AuthenticationKey object is " 
    83                "disallowed for security reasons" 
    84            ) 
    85        return AuthenticationKey, (bytes(self),)