Hello community,
here is the log from the commit of package python-billiard for openSUSE:Factory
checked in at 2019-09-23 12:10:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-billiard (Old)
and /work/SRC/openSUSE:Factory/.python-billiard.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-billiard"
Mon Sep 23 12:10:13 2019 rev:18 rq:730686 version:3.6.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-billiard/python-billiard.changes
2019-06-04 12:10:03.279866690 +0200
+++
/work/SRC/openSUSE:Factory/.python-billiard.new.7948/python-billiard.changes
2019-09-23 12:10:18.285876695 +0200
@@ -1,0 +2,11 @@
+Fri Sep 13 11:19:39 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 3.6.1.0:
+ - Logging max memory reached at INFO rather than WARNING (#255)
+ - Pass arguments when wrapping sys.exit (#275)
+ - Remove win32/py2k special (#276)
+ - Ensure READY messages sent out by exiting worker are consumed prior to it
actually existing.
+ - Pass max_memory_per_child to child worker process (#251)
+ - Fix compatibility with Python 2.7 on Windows (#283)
+
+-------------------------------------------------------------------
Old:
----
billiard-3.6.0.0.tar.gz
New:
----
billiard-3.6.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-billiard.spec ++++++
--- /var/tmp/diff_new_pack.urXzch/_old 2019-09-23 12:10:20.109876394 +0200
+++ /var/tmp/diff_new_pack.urXzch/_new 2019-09-23 12:10:20.113876394 +0200
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-billiard
-Version: 3.6.0.0
+Version: 3.6.1.0
Release: 0
Summary: Python multiprocessing fork
License: BSD-3-Clause
@@ -27,7 +27,7 @@
Source:
https://files.pythonhosted.org/packages/source/b/billiard/billiard-%{version}.tar.gz
BuildRequires: %{python_module case >= 1.3.1}
BuildRequires: %{python_module psutil}
-BuildRequires: %{python_module pytest >= 3.0}
+BuildRequires: %{python_module pytest < 5}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
++++++ billiard-3.6.0.0.tar.gz -> billiard-3.6.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/CHANGES.txt
new/billiard-3.6.1.0/CHANGES.txt
--- old/billiard-3.6.0.0/CHANGES.txt 2019-02-04 06:56:37.000000000 +0100
+++ new/billiard-3.6.1.0/CHANGES.txt 2019-08-14 18:05:59.000000000 +0200
@@ -1,4 +1,19 @@
-3.6.0.0 - 2018-02-04
+3.6.1 - 2019-08-14
+--------------------
+
+- Logging max memory reached at INFO rather than WARNING (#255)
+
+- Pass arguments when wrapping sys.exit (#275)
+
+- Remove win32/py2k special (#276)
+
+- Ensure READY messages sent out by exiting worker are consumed prior to it
actually existing.
+
+- Pass max_memory_per_child to child worker process (#251)
+
+- Fix compatibility with Python 2.7 on Windows (#283)
+
+3.6.0.0 - 2019-02-04
--------------------
- Add support of sending parent process death signal.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/Modules/_billiard/multiprocessing.h
new/billiard-3.6.1.0/Modules/_billiard/multiprocessing.h
--- old/billiard-3.6.0.0/Modules/_billiard/multiprocessing.h 2018-12-03
12:24:37.000000000 +0100
+++ new/billiard-3.6.1.0/Modules/_billiard/multiprocessing.h 2019-08-14
17:53:16.000000000 +0200
@@ -4,7 +4,7 @@
#define PY_SSIZE_T_CLEAN
#ifdef __sun
-/* The control message API is only available on Solaris
+/* The control message API is only available on Solaris
if XPG 4.2 or later is requested. */
#define _XOPEN_SOURCE 500
#endif
@@ -37,7 +37,7 @@
# include <semaphore.h>
typedef sem_t *SEM_HANDLE;
# endif
-# define HANDLE int
+# define HANDLE long
# define SOCKET int
# define BOOL int
# define UINT32 uint32_t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/Modules/_billiard/win32_functions.c
new/billiard-3.6.1.0/Modules/_billiard/win32_functions.c
--- old/billiard-3.6.0.0/Modules/_billiard/win32_functions.c 2018-12-03
12:24:37.000000000 +0100
+++ new/billiard-3.6.1.0/Modules/_billiard/win32_functions.c 2019-08-14
17:53:16.000000000 +0200
@@ -551,7 +551,7 @@
else
buf = &_buf;
- if (!PyArg_Parse(bufobj, "y*", buf)) {
+ if (!PyArg_Parse(bufobj, "s*", buf)) {
Py_XDECREF(overlapped);
return NULL;
}
@@ -685,7 +685,7 @@
Py_DECREF(v);
}
/* If this is the main thread then make the wait interruptible
- by Ctrl-C unless we are waiting for *all* handles
+ by Ctrl-C unless we are waiting for *all* handles
if (!wait_flag && _PyOS_IsMainThread()) {
sigint_event = _PyOS_SigintEvent();
assert(sigint_event != NULL);
@@ -904,6 +904,7 @@
WIN32_CONSTANT(F_DWORD, ERROR_BROKEN_PIPE);
WIN32_CONSTANT(F_DWORD, ERROR_IO_PENDING);
WIN32_CONSTANT(F_DWORD, ERROR_NETNAME_DELETED);
+ WIN32_CONSTANT(F_DWORD, ERROR_OPERATION_ABORTED);
WIN32_CONSTANT(F_DWORD, GENERIC_READ);
WIN32_CONSTANT(F_DWORD, GENERIC_WRITE);
WIN32_CONSTANT(F_DWORD, DUPLICATE_SAME_ACCESS);
@@ -924,6 +925,8 @@
WIN32_CONSTANT(F_DWORD, WAIT_TIMEOUT);
WIN32_CONSTANT(F_DWORD, FILE_FLAG_FIRST_PIPE_INSTANCE);
WIN32_CONSTANT(F_DWORD, FILE_FLAG_OVERLAPPED);
+ WIN32_CONSTANT(F_DWORD, FILE_GENERIC_READ);
+ WIN32_CONSTANT(F_DWORD, FILE_GENERIC_WRITE);
WIN32_CONSTANT("i", NULL);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/PKG-INFO
new/billiard-3.6.1.0/PKG-INFO
--- old/billiard-3.6.0.0/PKG-INFO 2019-02-04 07:00:30.000000000 +0100
+++ new/billiard-3.6.1.0/PKG-INFO 2019-08-14 18:09:00.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.2
Name: billiard
-Version: 3.6.0.0
+Version: 3.6.1.0
Summary: Python multiprocessing fork with improvements and bugfixes
Home-page: https://github.com/celery/billiard
Author: R Oudkerk / Python Software Foundation
@@ -42,7 +42,7 @@
About
-----
- `billiard` is a fork of the Python 2.7 `multiprocessing
<https://docs.python.org/library/multiprocessing.html>`_
+ ``billiard`` is a fork of the Python 2.7 `multiprocessing
<https://docs.python.org/library/multiprocessing.html>`_
package. The multiprocessing package itself is a renamed and updated
version of
R Oudkerk's `pyprocessing <https://pypi.org/project/processing/>`_
package.
This standalone variant draws its fixes/improvements from python-trunk
and provides
@@ -50,9 +50,9 @@
- 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
<http://pyprocessing.berlios.de/doc/THANKS.html>`_
+ package listed `here
<http://pyprocessing.berlios.de/doc/THANKS.html>`_.
- - Also it is a fork of the multiprocessing backport package by
Christian Heims.
+ - Also, it is a fork of the multiprocessing backport package by
Christian Heims.
- It includes the no-execv patch contributed by R. Oudkerk.
@@ -63,6 +63,11 @@
.. _`Celery`: http://celeryproject.org
+ Documentation
+ -------------
+
+ The documentation for ``billiard`` is available on `Read the Docs
<https://billiard.readthedocs.io>`_.
+
Bug reporting
-------------
@@ -79,9 +84,9 @@
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: Jython
Classifier: Programming Language :: Python :: Implementation :: PyPy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/README.rst
new/billiard-3.6.1.0/README.rst
--- old/billiard-3.6.0.0/README.rst 2019-02-04 06:57:33.000000000 +0100
+++ new/billiard-3.6.1.0/README.rst 2019-08-14 17:53:16.000000000 +0200
@@ -32,7 +32,7 @@
About
-----
-`billiard` is a fork of the Python 2.7 `multiprocessing
<https://docs.python.org/library/multiprocessing.html>`_
+``billiard`` is a fork of the Python 2.7 `multiprocessing
<https://docs.python.org/library/multiprocessing.html>`_
package. The multiprocessing package itself is a renamed and updated version of
R Oudkerk's `pyprocessing <https://pypi.org/project/processing/>`_ package.
This standalone variant draws its fixes/improvements from python-trunk and
provides
@@ -40,9 +40,9 @@
- 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 <http://pyprocessing.berlios.de/doc/THANKS.html>`_
+ package listed `here <http://pyprocessing.berlios.de/doc/THANKS.html>`_.
-- Also it is a fork of the multiprocessing backport package by Christian Heims.
+- Also, it is a fork of the multiprocessing backport package by Christian
Heims.
- It includes the no-execv patch contributed by R. Oudkerk.
@@ -53,6 +53,11 @@
.. _`Celery`: http://celeryproject.org
+Documentation
+-------------
+
+The documentation for ``billiard`` is available on `Read the Docs
<https://billiard.readthedocs.io>`_.
+
Bug reporting
-------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard/__init__.py
new/billiard-3.6.1.0/billiard/__init__.py
--- old/billiard-3.6.0.0/billiard/__init__.py 2019-02-04 06:57:14.000000000
+0100
+++ new/billiard-3.6.1.0/billiard/__init__.py 2019-08-14 18:07:35.000000000
+0200
@@ -22,7 +22,7 @@
import sys
from . import context
-VERSION = (3, 6, 0, 0)
+VERSION = (3, 6, 1, 0)
__version__ = '.'.join(map(str, VERSION[0:4])) + "".join(VERSION[4:])
__author__ = 'R Oudkerk / Python Software Foundation'
__author_email__ = '[email protected]'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard/connection.py
new/billiard-3.6.1.0/billiard/connection.py
--- old/billiard-3.6.0.0/billiard/connection.py 2018-12-03 12:24:37.000000000
+0100
+++ new/billiard-3.6.1.0/billiard/connection.py 2019-08-14 17:53:16.000000000
+0200
@@ -38,10 +38,8 @@
else:
if sys.platform == 'win32':
WAIT_OBJECT_0 = _winapi.WAIT_OBJECT_0
- try:
- WAIT_ABANDONED_0 = _winapi.WAIT_ABANDONED_0
- except AttributeError:
- WAIT_ABANDONED_0 = 128 # noqa
+ WAIT_ABANDONED_0 = _winapi.WAIT_ABANDONED_0
+
WAIT_TIMEOUT = _winapi.WAIT_TIMEOUT
INFINITE = _winapi.INFINITE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard/pool.py
new/billiard-3.6.1.0/billiard/pool.py
--- old/billiard-3.6.0.0/billiard/pool.py 2019-02-04 06:39:49.000000000
+0100
+++ new/billiard-3.6.1.0/billiard/pool.py 2019-08-14 17:53:16.000000000
+0200
@@ -44,7 +44,7 @@
WorkerLostError,
)
from .five import Empty, Queue, range, values, reraise, monotonic
-from .util import Finalize, debug
+from .util import Finalize, debug, warning
MAXMEM_USED_FMT = """\
child process exiting after exceeding memory limit ({0}KiB / {1}KiB)
@@ -110,6 +110,8 @@
LOST_WORKER_TIMEOUT = 10.0
EX_OK = getattr(os, "EX_OK", 0)
+GUARANTEE_MESSAGE_CONSUMPTION_RETRY_LIMIT = 300
+GUARANTEE_MESSAGE_CONSUMPTION_RETRY_INTERVAL = 0.1
job_counter = itertools.count()
@@ -236,7 +238,7 @@
def __init__(self, inq, outq, synq=None, initializer=None, initargs=(),
maxtasks=None, sentinel=None, on_exit=None,
sigprotection=True, wrap_exception=True,
- max_memory_per_child=None):
+ max_memory_per_child=None, on_ready_counter=None):
assert maxtasks is None or (type(maxtasks) == int and maxtasks > 0)
self.initializer = initializer
self.initargs = initargs
@@ -247,6 +249,7 @@
self.sigprotection = sigprotection
self.inq, self.outq, self.synq = inq, outq, synq
self.wrap_exception = wrap_exception # XXX cannot disable yet
+ self.on_ready_counter = on_ready_counter
self.contribute_to_object(self)
def contribute_to_object(self, obj):
@@ -268,7 +271,7 @@
return self.__class__, (
self.inq, self.outq, self.synq, self.initializer,
self.initargs, self.maxtasks, self._shutdown, self.on_exit,
- self.sigprotection, self.wrap_exception,
+ self.sigprotection, self.wrap_exception, self.max_memory_per_child,
)
def __call__(self):
@@ -277,7 +280,7 @@
def exit(status=None):
_exitcode[0] = status
- return _exit()
+ return _exit(status)
sys.exit = exit
pid = os.getpid()
@@ -343,47 +346,70 @@
i += 1
completed = 0
- while maxtasks is None or (maxtasks and completed < maxtasks):
- req = wait_for_job()
- if req:
- type_, args_ = req
- assert type_ == TASK
- job, i, fun, args, kwargs = args_
- put((ACK, (job, i, now(), pid, synqW_fd)))
- if _wait_for_syn:
- confirm = wait_for_syn(job)
- if not confirm:
- continue # received NACK
- try:
- result = (True, prepare_result(fun(*args, **kwargs)))
- except Exception:
- result = (False, ExceptionInfo())
- try:
- put((READY, (job, i, result, inqW_fd)))
- except Exception as exc:
- _, _, tb = sys.exc_info()
+ try:
+ while maxtasks is None or (maxtasks and completed < maxtasks):
+ req = wait_for_job()
+ if req:
+ type_, args_ = req
+ assert type_ == TASK
+ job, i, fun, args, kwargs = args_
+ put((ACK, (job, i, now(), pid, synqW_fd)))
+ if _wait_for_syn:
+ confirm = wait_for_syn(job)
+ if not confirm:
+ continue # received NACK
+ try:
+ result = (True, prepare_result(fun(*args, **kwargs)))
+ except Exception:
+ result = (False, ExceptionInfo())
try:
- wrapped = MaybeEncodingError(exc, result[1])
- einfo = ExceptionInfo((
- MaybeEncodingError, wrapped, tb,
- ))
- put((READY, (job, i, (False, einfo), inqW_fd)))
- finally:
- del(tb)
- completed += 1
- if max_memory_per_child > 0:
- used_kb = mem_rss()
- if used_kb <= 0:
- error('worker unable to determine memory usage')
- if used_kb > 0 and used_kb > max_memory_per_child:
- error(MAXMEM_USED_FMT.format(
- used_kb, max_memory_per_child))
- return EX_RECYCLE
-
- debug('worker exiting after %d tasks', completed)
- if maxtasks:
- return EX_RECYCLE if completed == maxtasks else EX_FAILURE
- return EX_OK
+ put((READY, (job, i, result, inqW_fd)))
+ except Exception as exc:
+ _, _, tb = sys.exc_info()
+ try:
+ wrapped = MaybeEncodingError(exc, result[1])
+ einfo = ExceptionInfo((
+ MaybeEncodingError, wrapped, tb,
+ ))
+ put((READY, (job, i, (False, einfo), inqW_fd)))
+ finally:
+ del(tb)
+ completed += 1
+ if max_memory_per_child > 0:
+ used_kb = mem_rss()
+ if used_kb <= 0:
+ error('worker unable to determine memory usage')
+ if used_kb > 0 and used_kb > max_memory_per_child:
+ warning(MAXMEM_USED_FMT.format(
+ used_kb, max_memory_per_child))
+ return EX_RECYCLE
+
+ debug('worker exiting after %d tasks', completed)
+ if maxtasks:
+ return EX_RECYCLE if completed == maxtasks else EX_FAILURE
+ return EX_OK
+ finally:
+ # Before exiting the worker, we want to ensure that that all
+ # messages produced by the worker have been consumed by the main
+ # process. This prevents the worker being terminated prematurely
+ # and messages being lost.
+ self._ensure_messages_consumed(completed=completed)
+
+ def _ensure_messages_consumed(self, completed):
+ """ Returns true if all messages sent out have been received and
+ consumed within a reasonable amount of time """
+
+ if not self.on_ready_counter:
+ return False
+
+ for retry in range(GUARANTEE_MESSAGE_CONSUMPTION_RETRY_LIMIT):
+ if self.on_ready_counter.value >= completed:
+ debug('ensured messages consumed after %d retries', retry)
+ return True
+ time.sleep(GUARANTEE_MESSAGE_CONSUMPTION_RETRY_INTERVAL)
+ warning('could not ensure all messages were consumed prior to '
+ 'exiting')
+ return False
def after_fork(self):
if hasattr(self.inq, '_writer'):
@@ -753,7 +779,7 @@
def __init__(self, outqueue, get, cache, poll,
join_exited_workers, putlock, restart_state,
- check_timeouts, on_job_ready):
+ check_timeouts, on_job_ready, on_ready_counters=None):
self.outqueue = outqueue
self.get = get
self.cache = cache
@@ -765,6 +791,7 @@
self._shutdown_complete = False
self.check_timeouts = check_timeouts
self.on_job_ready = on_job_ready
+ self.on_ready_counters = on_ready_counters
self._make_methods()
super(ResultHandler, self).__init__()
@@ -793,6 +820,14 @@
item = cache[job]
except KeyError:
return
+
+ if self.on_ready_counters:
+ worker_pid = next(iter(item.worker_pids()), None)
+ if worker_pid and worker_pid in self.on_ready_counters:
+ on_ready_counter = self.on_ready_counters[worker_pid]
+ with on_ready_counter.get_lock():
+ on_ready_counter.value += 1
+
if not item.ready():
if putlock is not None:
putlock.release()
@@ -1004,6 +1039,7 @@
self._pool = []
self._poolctrl = {}
+ self._on_ready_counters = {}
self.putlocks = putlocks
self._putlock = semaphore or LaxBoundedSemaphore(self._processes)
for i in range(self._processes):
@@ -1069,7 +1105,8 @@
self._outqueue, self._quick_get, self._cache,
self._poll_result, self._join_exited_workers,
self._putlock, self.restart_state, self.check_timeouts,
- self.on_job_ready, **extra_kwargs
+ self.on_job_ready, on_ready_counters=self._on_ready_counters,
+ **extra_kwargs
)
def on_job_ready(self, job, i, obj, inqW_fd):
@@ -1102,6 +1139,7 @@
def _create_worker_process(self, i):
sentinel = self._ctx.Event() if self.allow_restart else None
inq, outq, synq = self.get_process_queues()
+ on_ready_counter = self._ctx.Value('i')
w = self.WorkerProcess(self.Worker(
inq, outq, synq, self._initializer, self._initargs,
self._maxtasksperchild, sentinel, self._on_process_exit,
@@ -1110,6 +1148,7 @@
sigprotection=self.threads,
wrap_exception=self._wrap_exception,
max_memory_per_child=self._max_memory_per_child,
+ on_ready_counter=on_ready_counter,
))
self._pool.append(w)
self._process_register_queues(w, (inq, outq, synq))
@@ -1118,6 +1157,7 @@
w.index = i
w.start()
self._poolctrl[w.pid] = sentinel
+ self._on_ready_counters[w.pid] = on_ready_counter
if self.on_process_up:
self.on_process_up(w)
return w
@@ -1168,6 +1208,7 @@
self.process_flush_queues(worker)
del self._pool[i]
del self._poolctrl[worker.pid]
+ del self._on_ready_counters[worker.pid]
if cleaned:
all_pids = [w.pid for w in self._pool]
for job in list(self._cache.values()):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard/popen_spawn_win32.py
new/billiard-3.6.1.0/billiard/popen_spawn_win32.py
--- old/billiard-3.6.0.0/billiard/popen_spawn_win32.py 2018-12-03
12:24:37.000000000 +0100
+++ new/billiard-3.6.1.0/billiard/popen_spawn_win32.py 2019-08-14
17:53:16.000000000 +0200
@@ -30,9 +30,13 @@
if sys.platform == 'win32':
try:
- from _winapi import CreateProcess
+ from _winapi import CreateProcess, GetExitCodeProcess
+ close_thread_handle = _winapi.CloseHandle
except ImportError: # Py2.7
- from _subprocess import CreateProcess
+ from _subprocess import CreateProcess, GetExitCodeProcess
+
+ def close_thread_handle(handle):
+ handle.Close()
class Popen(object):
@@ -61,7 +65,7 @@
hp, ht, pid, tid = CreateProcess(
spawn.get_executable(), cmd,
None, None, False, 0, None, None, None)
- _winapi.CloseHandle(ht)
+ close_thread_handle(ht)
except:
_winapi.CloseHandle(rhandle)
raise
@@ -100,7 +104,7 @@
res = _winapi.WaitForSingleObject(int(self._handle), msecs)
if res == _winapi.WAIT_OBJECT_0:
- code = _winapi.GetExitCodeProcess(self._handle)
+ code = GetExitCodeProcess(self._handle)
if code == TERMINATE:
code = -signal.SIGTERM
self.returncode = code
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard/util.py
new/billiard-3.6.1.0/billiard/util.py
--- old/billiard-3.6.0.0/billiard/util.py 2019-01-06 15:47:21.000000000
+0100
+++ new/billiard-3.6.1.0/billiard/util.py 2019-08-14 17:53:16.000000000
+0200
@@ -84,6 +84,7 @@
DEBUG = 10
INFO = 20
SUBWARNING = 25
+WARNING = 30
ERROR = 40
LOGGER_NAME = 'multiprocessing'
@@ -112,6 +113,9 @@
if _logger:
_logger.log(SUBWARNING, msg, *args, **kwargs)
+def warning(msg, *args, **kwargs):
+ if _logger:
+ _logger.log(WARNING, msg, *args, **kwargs)
def error(msg, *args, **kwargs):
if _logger:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard.egg-info/PKG-INFO
new/billiard-3.6.1.0/billiard.egg-info/PKG-INFO
--- old/billiard-3.6.0.0/billiard.egg-info/PKG-INFO 2019-02-04
07:00:30.000000000 +0100
+++ new/billiard-3.6.1.0/billiard.egg-info/PKG-INFO 2019-08-14
18:08:59.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.2
Name: billiard
-Version: 3.6.0.0
+Version: 3.6.1.0
Summary: Python multiprocessing fork with improvements and bugfixes
Home-page: https://github.com/celery/billiard
Author: R Oudkerk / Python Software Foundation
@@ -42,7 +42,7 @@
About
-----
- `billiard` is a fork of the Python 2.7 `multiprocessing
<https://docs.python.org/library/multiprocessing.html>`_
+ ``billiard`` is a fork of the Python 2.7 `multiprocessing
<https://docs.python.org/library/multiprocessing.html>`_
package. The multiprocessing package itself is a renamed and updated
version of
R Oudkerk's `pyprocessing <https://pypi.org/project/processing/>`_
package.
This standalone variant draws its fixes/improvements from python-trunk
and provides
@@ -50,9 +50,9 @@
- 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
<http://pyprocessing.berlios.de/doc/THANKS.html>`_
+ package listed `here
<http://pyprocessing.berlios.de/doc/THANKS.html>`_.
- - Also it is a fork of the multiprocessing backport package by
Christian Heims.
+ - Also, it is a fork of the multiprocessing backport package by
Christian Heims.
- It includes the no-execv patch contributed by R. Oudkerk.
@@ -63,6 +63,11 @@
.. _`Celery`: http://celeryproject.org
+ Documentation
+ -------------
+
+ The documentation for ``billiard`` is available on `Read the Docs
<https://billiard.readthedocs.io>`_.
+
Bug reporting
-------------
@@ -79,9 +84,9 @@
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: Jython
Classifier: Programming Language :: Python :: Implementation :: PyPy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard.egg-info/top_level.txt
new/billiard-3.6.1.0/billiard.egg-info/top_level.txt
--- old/billiard-3.6.0.0/billiard.egg-info/top_level.txt 2019-02-04
07:00:30.000000000 +0100
+++ new/billiard-3.6.1.0/billiard.egg-info/top_level.txt 2019-08-14
18:08:59.000000000 +0200
@@ -1,2 +1 @@
-_billiard
billiard
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/requirements/test.txt
new/billiard-3.6.1.0/requirements/test.txt
--- old/billiard-3.6.0.0/requirements/test.txt 2019-01-06 15:47:21.000000000
+0100
+++ new/billiard-3.6.1.0/requirements/test.txt 2019-08-14 17:53:16.000000000
+0200
@@ -1,3 +1,3 @@
case>=1.3.1
-pytest>=3.0
+pytest<5
psutil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-3.6.0.0/setup.py
new/billiard-3.6.1.0/setup.py
--- old/billiard-3.6.0.0/setup.py 2019-02-04 06:39:49.000000000 +0100
+++ new/billiard-3.6.1.0/setup.py 2019-08-14 17:53:16.000000000 +0200
@@ -242,9 +242,9 @@
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
+ 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: Jython',
'Programming Language :: Python :: Implementation :: PyPy',