* Mon Jun 26 2017 email@example.com
- update to version 22.214.171.124:
* max_memory_per_child was measured in kilobytes on Linux, but
bytes on *BSD/MacOS, it's now always kilobytes.
* Windows: Adds support for max_memory_per_child, but requires
the psutil package to be installed.
* Fixed bug in ForkingPickler.loadbuf, where it tried to pass
a BytesIO instance directly to ``pickle.loads`` on Python 2.7.
- additional changes from version 126.96.36.199:
* Connection: Properly handle EINTR (Issue #191).
* Fixed bug with missing CreateProcess for Windows on Python 2.7.
* Adds Process._counter for compatibility with Python <3.5.
- additional changes from version 188.8.131.52:
* No longer supports Python 2.6
You need Python 2.7 or later to use this version of billiard.
* Merged changes from CPython 3.5
- convert the package to singlespec and import changes from
- change the source URL to pythonhosted.org
- update the BuildRequires for test:
* remove mock, nose and unittest2
* add case and pytest
- split the documentation to a separate package
- remove the shebang cleanup: not needed anymore
* Wed Jan 13 2016 firstname.lastname@example.org
- Update to version 184.108.40.206:
* Wheel packages for Windows now available.
- Changes from 220.127.116.11:
* Pool: Fixed semaphore error on Python3.
* Fixed libSystem error on OS X El Capitan.
* Sat Apr 25 2015 email@example.com
- update to version 18.104.22.168:
* Pool: Timeouts will attempt to send SIGKILL, but this signal
does not exist on Windows. Replaced with SIGTERM.
- additional changes from version 22.214.171.124:
* Pool: Exceptions in user timeout callbacks are now logged
instead of crashing the pool. Contributed by Pierre Fersing.
* Pool: Exit codes in errors were improperly being represented
* Pool: ``.map``. and ``.imap`` now working again.
* Now builds on FreeBSD 10. Contributed by Michael Fladischer.
- update project URL
- add fdupes as BuildRequires and call it after install
- remove BuildRequires python-nose-cover3, not needed by the tests
- set a minimum version for python-nose
- remove unwanted shebang of funtests/setup.py
- add -fno-strict-aliasing to CFLAGS to avoid potential breakage
* Fri Aug 15 2014 firstname.lastname@example.org
- Update to 126.96.36.199
- see https://pypi.python.org/pypi/billiard for complete changelog
* Sun Dec 01 2013 email@example.com
- Update to version 188.8.131.52:
+ Now also sets ``multiprocessing.current_process`` for compatibility
with loggings ``processName`` field
* Wed Nov 13 2013 firstname.lastname@example.org
- Update to version 184.108.40.206
+ Now works without C extension again.
+ New ``_billiard.read(fd, buffer, [len, ])` function
implements os.read with buffer support (new buffer API)
+ New pure-python implementation of ``Connection.send_offset``.
- Changes from 220.127.116.11
+ All platforms except for Windows/PyPy/Jython now requires the C extension.
- Changes from 18.104.22.168
+ Fixed problem with Python3 and setblocking.
- Changes from 22.214.171.124
+ Now works on Windows again.
- Changes from 126.96.36.199
+ ApplyResult.terminate() may be set to signify that the job
must not be executed. It can be used in combination with
+ Pipe/_SimpleQueue: Now supports rnonblock/wnonblock arguments
to set the read or write end of the pipe to be nonblocking.
+ Pool: Log message included exception info but exception happened
in another process so the resulting traceback was wrong.
+ Pool: Worker process can now prepare results before they are sent
back to the main process (using ``Worker.prepare_result``).
- Changes from 188.8.131.52
+ Pool: New ``correlation_id`` argument to ``apply_async`` can be
used to set a related id for the ``ApplyResult`` object returned:
>>> r = pool.apply_async(target, args, kwargs, correlation_id='foo')
+ Pool: New callback `on_process_exit` is called when a pool
process exits, with signature ``(pid, exitcode)``.
+ Pool: Improved the too many restarts detection.
- Changes from 184.108.40.206
+ Dual code base now runs on Python 2.6+ and Python 3.
+ No longer compatible with Python 2.5
+ Includes many changes from multiprocessing in 3.4.
+ Now uses ``time.monotonic`` when available, also including
fallback implementations for Linux and OS X.
+ No longer cleans up after receiving SIGILL, SIGSEGV or SIGFPE
+ ``Finalize`` and ``register_after_fork`` is now aliases to multiprocessing.
It's better to import these from multiprocessing directly now
so that there aren't multiple registries.
+ New `billiard.queues._SimpleQueue` that does not use semaphores.
+ Pool: Can now be extended to support using multiple IPC queues.
+ Pool: Can now use async I/O to write to pool IPC queues.
+ Pool: New ``Worker.on_loop_stop`` handler can be used to add actions
at pool worker process shutdown.
Note that, like all finalization handlers, there is no guarantee that
this will be executed.
* Thu Oct 24 2013 email@example.com
- Require python-setuptools instead of distribute (upstreams merged)
* Wed Sep 25 2013 firstname.lastname@example.org
- Update to version 220.127.116.11
+ Fixed compatibility with Python 3.3
+ Process boostrap: Now ignores errors while flushing stdout (Issue #16)
- Changes from version 18.104.22.168
+ Recent changes broke support for running without C extension (Issue #57)
- Changes from version 22.214.171.124
+ Fixed ImportError in billiard._ext
- Changes from version 126.96.36.199
+ Compilation: Fixed improper handling of HAVE_SEM_OPEN (Issue #55)
+ Process now releases logging locks after fork.
+ Pool.terminate_job now ignores No such process errors.
+ billiard.Pool entrypoint did not support new arguments to billiard.pool.Pool
+ Connection inbound buffer size increased from 1kb to 128kb.
+ C extension cleaned up by properly adding a namespace to symbols.
+_exit_function now works even if thread wakes up after gc collect.
* Fri Jun 28 2013 email@example.com
- Update to version 188.8.131.52:
+ Pool: Fixed regression that disabled the deadlock fix in 184.108.40.206
+ Pool: RestartFreqExceeded could be raised prematurely.
+ Process: Include pid in startup and process INFO logs.
- Changes from version 220.127.116.11:
+ Manager now works again.
+ Python 3 fixes for billiard.connection.
+ Fixed invalid argument bug when running on Python 3.3
+ Ignore OSError when setting up signal handlers.
- Changes from version 18.104.22.168:
+ Pool: Child processes must ignore SIGINT.
- Changes from version 22.214.171.124:
+ Pool: 126.96.36.199 broke support for subprocesses (Issue #48).
- Changes from version 188.8.131.52:
+ Pool: Make sure finally blocks are called when process exits due to a signal.
+ Pool: Can now use GDB to debug pool child processes.
+ Fixes Python 3 compatibility problems.
* Fri Mar 22 2013 firstname.lastname@example.org
- Update to 184.108.40.206:
- Windows: Now catches SystemExit from setuptools while trying to
build the C extension (Issue #41).
- Aditional changes from 220.127.116.11:
- Pool: apply_async now supports a callbacks_propagate keyword
argument that can be a tuple of exceptions to propagate in
callbacks. (callback, errback, accept_callback, timeout_callback).
- Errors are no longer logged for OK and recycle exit codes.
This would cause normal maxtasksperchild recycled process
to log an error.
- Fixed Python 2.5 compatibility problem (Issue #33).
- FreeBSD: Compilation now disables semaphores if Python was built
without it (Issue #40).
Contributed by William Grzybowski
- Aditional changes from 18.104.22.168:
- Fixed typo EX_REUSE -> EX_RECYCLE
- Code now conforms to new pep8.py rules.
- Aditional changes from 22.214.171.124:
- Pool: Disable restart limit if maxR is not set.
- Pool: Now uses os.kill instead of signal.signal.
Contributed by Lukasz Langa
- Fixed name error in process.py
- Pool: ApplyResult.get now properly raises exceptions.
Fix contributed by xentac.
* Fri Jan 25 2013 email@example.com
- Update to 126.96.36.199:
* Fixes problem at shutdown when gc has collected symbols.
* Pool now always uses _kill for Py2.5 compatibility on Windows (Issue
* Fixes Python 3 compatibility issues
* Tue Nov 13 2012 firstname.lastname@example.org
- Update to 188.8.131.52:
* [Pool] Fix for check_timeouts if not set.
Fix contributed by Dmitry Sukhov
* Fixed pickle problem with Traceback.
Code.frame.__loader__ is now ignored as it may be set to an unpickleable
* The Django old-layout warning was always showing.
184.108.40.206 - 2012-09-26
* Fixes typo
220.127.116.11 - 2012-09-26
* Windows: Fixes for SemLock._rebuild (Issue #24).
* Pool: Job terminated with terminate_job now raises
18.104.22.168 - 2012-09-21
* Windows: Fixes unpickling of SemLock when using fallback.
* Windows: Fixes installation when no C compiler.
22.214.171.124 - 2012-09-20
* Installation now works again for Python 3.
126.96.36.199 - 2012-09-14
* Merged with Python trunk (many authors, many fixes: see Python changelog
* Using execv now also works with older Django projects using setup_environ
* 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.
188.8.131.52 - 2012-08-05
* Fixed Python 2.5 compatibility issue.
* New Pool.terminate_job(pid) to terminate a job without raising
184.108.40.206 - 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.
220.127.116.11 - 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
18.104.22.168 - 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.
22.214.171.124 - 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
* Two new pool callbacks:
* on_timeout_set(job, soft, hard)
Applied when a task is executed with a timeout.
Applied when a timeout is cancelled (the job completed)
* Wed May 23 2012 email@example.com
- Update to 126.96.36.199
* Fixes Python 2.5 support.
- 188.8.131.52 - 2012-05-21
* Pool: Can now be used in an event loop, without starting the supporting
threads (TimeoutHandler still not supported)
* Pool: Process too frequent restart protection now only counts if the
process had a non-successful exitcode.
* Pool: New options max_restart + max_restart_freq
* Pool: The ``WorkerLostError`` message now includes the exitcode of the
process that disappeared.
- Build HTML docs
* Thu May 17 2012 firstname.lastname@example.org
- Update to 184.108.40.206
* 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
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
* Fri Apr 27 2012 email@example.com
- Update to 220.127.116.11
* Added billiard.ensure_multiprocessing() - Raises NotImplementedError if
the platform does not support multiprocessing (e.g. Jython).
* Wed Apr 25 2012 firstname.lastname@example.org
- Generate new spec
- Update to 18.104.22.168
* 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.
- 22.214.171.124 - 2012-04-20
* Now installs on PyPy/Jython (but does not work).
- 126.96.36.199 - 2012-04-20
* Python 2.5 support added.
- 188.8.131.52 - 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 improvments from Celery.
* no-execv patch added (http://bugs.python.org/issue8713)
* Fri Nov 25 2011 email@example.com
- Update to 0.3.1
* Fixed broken bool evaluation in supervisor. Thanks to jonozzz
The bug originated from a ``a if x else b`` vs. ``x and a or bz``
confusion when porting code to Python 2.4.
* ``ApplyResult._set`` can't delete the result if it's not been accepted.
This also means ``ApplyResult._ack`` needs to delete the result if the job
has been marked ready.
* Added support for accept callbacks.
* Python 2.4 support.
* Wed Apr 14 2010 firstname.lastname@example.org
- Initial import