Show More
Commit Description:
Merge pull request #17 from nattee/master...
Commit Description:
Merge pull request #17 from nattee/master
upgrade to current working snapshot
References:
File last commit:
Show/Diff file:
Action:
lib/assets/Lib/multiprocessing/process.py
| 112 lines
| 2.4 KiB
| text/x-python
| PythonLexer
|
r584 | # | |||
# Module providing the `Process` class which emulates `threading.Thread` | ||||
# | ||||
# multiprocessing/process.py | ||||
# | ||||
# Copyright (c) 2006-2008, R Oudkerk | ||||
# Licensed to PSF under a Contributor Agreement. | ||||
# | ||||
__all__ = ['Process', 'current_process', 'active_children'] | ||||
# | ||||
# Imports | ||||
# | ||||
import os | ||||
import sys | ||||
import signal | ||||
import itertools | ||||
from _weakrefset import WeakSet | ||||
#for brython | ||||
from _multiprocessing import Process | ||||
# | ||||
# | ||||
# | ||||
try: | ||||
ORIGINAL_DIR = os.path.abspath(os.getcwd()) | ||||
except OSError: | ||||
ORIGINAL_DIR = None | ||||
# | ||||
# Public functions | ||||
# | ||||
def current_process(): | ||||
''' | ||||
Return process object representing the current process | ||||
''' | ||||
return _current_process | ||||
def active_children(): | ||||
''' | ||||
Return list of process objects corresponding to live child processes | ||||
''' | ||||
_cleanup() | ||||
return list(_current_process._children) | ||||
# | ||||
# | ||||
# | ||||
def _cleanup(): | ||||
# check for processes which have finished | ||||
for p in list(_current_process._children): | ||||
if p._popen.poll() is not None: | ||||
_current_process._children.discard(p) | ||||
# | ||||
# The `Process` class | ||||
# | ||||
# brython note: class Process is defined in /usr/libs/_multiprocessing.js | ||||
# | ||||
# We subclass bytes to avoid accidental transmission of auth keys over network | ||||
# | ||||
class AuthenticationString(bytes): | ||||
def __reduce__(self): | ||||
from .forking import Popen | ||||
if not Popen.thread_is_spawning(): | ||||
raise TypeError( | ||||
'Pickling an AuthenticationString object is ' | ||||
'disallowed for security reasons' | ||||
) | ||||
return AuthenticationString, (bytes(self),) | ||||
# | ||||
# Create object representing the main process | ||||
# | ||||
class _MainProcess(Process): | ||||
def __init__(self): | ||||
self._identity = () | ||||
self._daemonic = False | ||||
self._name = 'MainProcess' | ||||
self._parent_pid = None | ||||
self._popen = None | ||||
self._counter = itertools.count(1) | ||||
self._children = set() | ||||
self._authkey = AuthenticationString(os.urandom(32)) | ||||
self._tempdir = None | ||||
_current_process = _MainProcess() | ||||
del _MainProcess | ||||
# | ||||
# Give names to some return codes | ||||
# | ||||
_exitcode_to_name = {} | ||||
for name, signum in list(signal.__dict__.items()): | ||||
if name[:3]=='SIG' and '_' not in name: | ||||
_exitcode_to_name[-signum] = name | ||||
# For debug and leak testing | ||||
_dangling = WeakSet() | ||||