Skip to main content

Python multiprocessing fork with improvements and bugfixes

Project description

billiard

About

billiard is a fork of the Python 2.7 multiprocessing package. The multiprocessing package itself is a renamed and updated version of R Oudkerk’s pyprocessing package. This standalone variant is intended to be compatible with Python 2.4 and 2.5, and will draw it’s fixes/improvements from python-trunk.

  • This package would not be possible if not for the contributions of not only the current maintainers but all of the contributors to the original pyprocessing package listed here

  • Also it is a fork of the multiprocessin backport package by Christian Heims.

  • It includes the no-execv patch contributed by R. Oudkerk.

  • And the Pool improvements previously located in Celery.

Bug reporting

Please report bugs related to multiprocessing at the Python bug tracker. Issues related to billiard should be reported at http://github.com/celery/billiard/issues.

Changes

2.7.3.14 - 2012-09-20

  • Installation now works again for Python 3.

2.7.3.13 - 2012-09-14

  • Merged with Python trunk (many authors, many fixes: see Python changelog in trunk).

  • Using execv now also works with older Django projects using setup_environ (Issue #10).

  • Billiard now installs with a warning that the C extension could not be built if a compiler is not installed or the build fails in some other way.

    It really is recommended to have the C extension installed when running with force execv, but this change also makes it easier to install.

  • Pool: Hard timeouts now sends KILL shortly after TERM so that C extensions cannot block the signal.

    Python signal handlers are called in the interpreter, so they cannot be called while a C extension is blocking the interpreter from running.

  • Now uses a timeout value for Thread.join that doesn’t exceed the maximum on some platforms.

  • Fixed bug in the SemLock fallback used when C extensions not installed.

    Fix contributed by Mher Movsisyan.

  • Pool: Now sets a Process.index attribute for every process in the pool.

    This number will always be between 0 and concurrency-1, and can be used to e.g. create a logfile for each process in the pool without creating a new logfile whenever a process is replaced.

2.7.3.12 - 2012-08-05

  • Fixed Python 2.5 compatibility issue.

  • New Pool.terminate_job(pid) to terminate a job without raising WorkerLostError

2.7.3.11 - 2012-08-01

  • Adds support for FreeBSD 7+

    Fix contributed by koobs.

  • Pool: New argument allow_restart is now required to enable the pool process sentinel that is required to restart the pool.

    It’s disabled by default, which reduces the number of file descriptors/semaphores required to run the pool.

  • Pool: Now emits a warning if a worker process exited with error-code.

    But not if the error code is 155, which is now returned if the worker process was recycled (maxtasksperchild).

  • Python 3 compatibility fixes.

  • Python 2.5 compatibility fixes.

2.7.3.10 - 2012-06-26

  • The TimeLimitExceeded exception string representation only included the seconds as a number, it now gives a more human friendly description.

  • Fixed typo in LaxBoundedSemaphore.shrink.

  • Pool: ResultHandler.handle_event no longer requires any arguments.

  • setup.py bdist now works

2.7.3.9 - 2012-06-03

  • Environment variable MP_MAIN_FILE envvar is now set to the path of the __main__ module when execv is enabled.

  • Pool: Errors occurring in the TaskHandler are now reported.

2.7.3.8 - 2012-06-01

  • Can now be installed on Py 3.2

  • Issue #12091: simplify ApplyResult and MapResult with threading.Event

    Patch by Charles-Francois Natali

  • Pool: Support running without TimeoutHandler thread.

    • The with_*_thread arguments has also been replaced with a single threads=True argument.

    • Two new pool callbacks:

      • on_timeout_set(job, soft, hard)

        Applied when a task is executed with a timeout.

      • on_timeout_cancel(job)

        Applied when a timeout is cancelled (the job completed)

2.7.3.7 - 2012-05-21

  • Fixes Python 2.5 support.

2.7.3.6 - 2012-05-21

  • Pool: Can now be used in an event loop, without starting the supporting threads (TimeoutHandler still not supported)

    To facilitate this the pool has gained the following keyword arguments:

    • with_task_thread

    • with_result_thread

    • with_supervisor_thread

    • on_process_up

      Callback called with Process instance as argument whenever a new worker process is added.

      Used to add new process fds to the eventloop:

      def on_process_up(proc):
          hub.add_reader(proc.sentinel, pool.maintain_pool)
    • on_process_down

      Callback called with Process instance as argument whenever a new worker process is found dead.

      Used to remove process fds from the eventloop:

      def on_process_down(proc):
          hub.remove(proc.sentinel)
    • semaphore

      Sets the semaphore used to protect from adding new items to the pool when no processes available. The default is a threaded one, so this can be used to change to an async semaphore.

    And the following attributes:

    - ``readers``
    
        A map of ``fd`` -> ``callback``, to be registered in an eventloop.
        Currently this is only the result outqueue with a callback
        that processes all currently incoming results.

    And the following methods:

    - ``did_start_ok``
    
        To be called after starting the pool, and after setting up the
        eventloop with the pool fds, to ensure that the worker processes
        didn't immediately exit caused by an error (internal/memory).
    
    - ``maintain_pool``
    
        Public version of ``_maintain_pool`` that handles max restarts.
  • Pool: Process too frequent restart protection now only counts if the process had a non-successful exit-code.

    This to take into account the maxtasksperchild option, and allowing processes to exit cleanly on their own.

  • Pool: New options max_restart + max_restart_freq

    This means that the supervisor can’t restart processes faster than max_restart’ times per max_restart_freq seconds (like the Erlang supervisor maxR & maxT settings).

    The pool is closed and joined if the max restart frequency is exceeded, where previously it would keep restarting at an unlimited rate, possibly crashing the system.

    The current default value is to stop if it exceeds 100 * process_count restarts in 1 seconds. This may change later.

    It will only count processes with an unsuccessful exit code, this is to take into account the maxtasksperchild setting and code that voluntarily exits.

  • Pool: The WorkerLostError message now includes the exit-code of the process that disappeared.

2.7.3.5 - 2012-05-09

  • Now always cleans up after sys.exc_info() to avoid cyclic references.

  • ExceptionInfo without arguments now defaults to sys.exc_info.

  • Forking can now be disabled using the MULTIPROCESSING_FORKING_DISABLE environment variable.

    Also this envvar is set so that the behavior is inherited after execv.

  • The semaphore cleanup process started when execv is used now sets a useful process name if the setproctitle module is installed.

  • Sets the FORKED_BY_MULTIPROCESSING environment variable if forking is disabled.

2.7.3.4 - 2012-04-27

  • Added billiard.ensure_multiprocessing()

    Raises NotImplementedError if the platform does not support multiprocessing (e.g. Jython).

2.7.3.3 - 2012-04-23

  • PyPy now falls back to using its internal _multiprocessing module, so everything works except for forking_enable(False) (which silently degrades).

  • Fixed Python 2.5 compat. issues.

  • Uses more with statements

  • Merged some of the changes from the Python 3 branch.

2.7.3.2 - 2012-04-20

  • Now installs on PyPy/Jython (but does not work).

2.7.3.1 - 2012-04-20

  • Python 2.5 support added.

2.7.3.0 - 2012-04-20

  • Updated from Python 2.7.3

  • Python 2.4 support removed, now only supports 2.5, 2.6 and 2.7. (may consider py3k support at some point).

  • Pool improvements from Celery.

  • no-execv patch added (http://bugs.python.org/issue8713)

Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

billiard-2.7.3.14.tar.gz (124.5 kB view details)

Uploaded Source

Built Distributions

billiard-2.7.3.14-py2.7-macosx-10.6-intel.egg (205.5 kB view details)

Uploaded Source

billiard-2.7.3.14-py2.6-macosx-10.8-intel.egg (205.8 kB view details)

Uploaded Source

billiard-2.7.3.14-py2.5-macosx-10.8-x86_64.egg (206.2 kB view details)

Uploaded Source

File details

Details for the file billiard-2.7.3.14.tar.gz.

File metadata

  • Download URL: billiard-2.7.3.14.tar.gz
  • Upload date:
  • Size: 124.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for billiard-2.7.3.14.tar.gz
Algorithm Hash digest
SHA256 995f6740a6361b2958e00db1fe57bb2c0ec589185f02eb895b0e543617500bd0
MD5 3092d3cf360a73eb89f47fcf686d655c
BLAKE2b-256 7edbd293914a063ab5efbc680d8ca4de0a9cc2da5d8e9a7a4150cca977c80e9c

See more details on using hashes here.

Provenance

File details

Details for the file billiard-2.7.3.14-py2.7-macosx-10.6-intel.egg.

File metadata

File hashes

Hashes for billiard-2.7.3.14-py2.7-macosx-10.6-intel.egg
Algorithm Hash digest
SHA256 3aa8adefb2fe138122e61e91a8b4bb686a18fbd98e9901e247ec10f56150fd0a
MD5 ac35f23da444bcdf3b18b457ee40f172
BLAKE2b-256 4505b34de39be18e6c5e5ac8fb5a5eb95894b049bb3b9983f12058bbbed15c73

See more details on using hashes here.

Provenance

File details

Details for the file billiard-2.7.3.14-py2.6-macosx-10.8-intel.egg.

File metadata

File hashes

Hashes for billiard-2.7.3.14-py2.6-macosx-10.8-intel.egg
Algorithm Hash digest
SHA256 194c47c62389b47dd35301beadfec01432bb000168dea499ea30e3e98e3dc10b
MD5 4e3417ff1a792dd7f4a18aed6a9b6228
BLAKE2b-256 1ef8155be62a8a6e942882dc20a873c73c20fcabd5819561327bdd71b0612e60

See more details on using hashes here.

Provenance

File details

Details for the file billiard-2.7.3.14-py2.5-macosx-10.8-x86_64.egg.

File metadata

File hashes

Hashes for billiard-2.7.3.14-py2.5-macosx-10.8-x86_64.egg
Algorithm Hash digest
SHA256 eda7310fee3ab08c2fb8ae68f35d6dc98eabb198d717bd675b6437d7603c3284
MD5 6a43d63c6a12cd7e7214b79ac6b9520c
BLAKE2b-256 862c751232716d2eb32ba5be5192301238c57d230b8a21e4f36f661ee91ef826

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page