summaryrefslogtreecommitdiffstats
path: root/Lib/concurrent/futures/process.py
Commit message (Collapse)AuthorAgeFilesLines
* [3.12] gh-94777: Fix deadlock in ProcessPoolExecutor (GH-94784) (#106609)Miss Islington (bot)2023-07-101-0/+4
| | | | | | | | gh-94777: Fix deadlock in ProcessPoolExecutor (GH-94784) Fixes a hang in multiprocessing process pool executor when a child process crashes and code could otherwise block on writing to the pipe. See GH-94777 for more details. (cherry picked from commit 6782fc050281205734700a1c3e13b123961ed15b) Co-authored-by: Louis Paulot <55740424+lpaulot@users.noreply.github.com>
* gh-94440: Fix issue of ProcessPoolExecutor shutdown hanging (#94468)yonatanp2023-03-161-0/+5
| | | | | Fix an issue of concurrent.futures ProcessPoolExecutor shutdown hanging. Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
* gh-102515: Remove unused imports in the `Lib/` directory (#102516)Alex Waygood2023-03-081-0/+2
|
* gh-84559: Remove the new multiprocessing warning, too disruptive. (#101551)Gregory P. Smith2023-02-031-17/+0
| | | | This reverts the core of #100618 while leaving relevant documentation improvements and minor refactorings in place.
* GH-84559: Deprecate fork being the multiprocessing default. (#100618)Gregory P. Smith2023-02-021-3/+20
| | | | | | | | This starts the process. Users who don't specify their own start method and use the default on platforms where it is 'fork' will see a DeprecationWarning upon multiprocessing.Pool() construction or upon multiprocessing.Process.start() or concurrent.futures.ProcessPool use. See the related issue and documentation within this change for details.
* gh-90622: Do not spawn ProcessPool workers on demand via fork method. (#91598)Gregory P. Smith2022-05-081-10/+34
| | | | | | Do not spawn ProcessPool workers on demand when they spawn via fork. This avoids potential deadlocks in the child processes due to forking from a multithreaded process.
* gh-90622: Prevent max_tasks_per_child use with a fork mp_context. (#91587)Gregory P. Smith2022-05-061-7/+17
| | | | | Prevent `max_tasks_per_child` use with a "fork" mp_context to avoid deadlocks. Also defaults to "spawn" when no mp_context is supplied for safe convenience.
* bpo-46787: Fix `ProcessPoolExecutor exception` memory leak (GH-31408) (#31408)themylogin2022-05-021-0/+3
| | | | Do not store `ProcessPoolExecutor` work item exception traceback that prevents exception frame locals from being garbage collected.
* bpo-43498: Fix dictionary iteration error in _ExecutorManagerThread (GH-24868)Jakub Kulík2021-11-291-1/+1
|
* bpo-44733: Add max_tasks_per_child to ProcessPoolExecutor (GH-27373)Logan Jones2021-11-201-14/+55
| | | Co-authored-by: Antoine Pitrou <antoine@python.org>
* Use `from` imports (GH-26594)Machinexa22021-06-081-5/+4
| | | from imports
* bpo-40692: Run more test_concurrent_futures tests (GH-20239)Asheesh Laroia2021-02-081-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | In the case of multiprocessing.synchronize() being missing, the test_concurrent_futures test suite now skips only the tests that require multiprocessing.synchronize(). Validate that multiprocessing.synchronize exists as part of _check_system_limits(), allowing ProcessPoolExecutor to raise NotImplementedError during __init__, rather than crashing with ImportError during __init__ when creating a lock imported from multiprocessing.synchronize. Use _check_system_limits() to disable tests of ProcessPoolExecutor on systems without multiprocessing.synchronize. Running the test suite without multiprocessing.synchronize reveals that Lib/compileall.py crashes when it uses a ProcessPoolExecutor. Therefore, change Lib/compileall.py to call _check_system_limits() before creating the ProcessPoolExecutor. Note that both Lib/compileall.py and Lib/test/test_compileall.py were attempting to sanity-check ProcessPoolExecutor by expecting ImportError. In multiprocessing.resource_tracker, sem_unlink() is also absent on platforms where POSIX semaphores aren't available. Avoid using sem_unlink() if it, too, does not exist. Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
* bpo-40443: Remove unused imports in the stdlib (GH-19803)Victor Stinner2020-04-301-1/+0
|
* bpo-39995: Fix concurrent.futures _ThreadWakeup (GH-19760)Victor Stinner2020-04-291-14/+27
| | | | Fix a race condition in concurrent.futures._ThreadWakeup: access to _ThreadWakeup is now protected with the shutdown lock.
* bpo-30966: concurrent.futures.Process.shutdown() closes queue (GH-19738)Victor Stinner2020-04-271-0/+2
| | | | Process.shutdown(wait=True) of concurrent.futures now closes explicitly the result queue.
* bpo-39207: Spawn workers on demand in ProcessPoolExecutor (GH-19453)Kyle Stanley2020-04-191-2/+14
| | | | | Roughly based on https://github.com/python/cpython/commit/904e34d4e6b6007986dcc585d5c553ee8ae06f95, but with a few substantial differences. /cc @pitrou @brianquinlan
* bpo-39812: Remove daemon threads in concurrent.futures (GH-19149)Kyle Stanley2020-03-271-17/+6
| | | | | | Remove daemon threads from :mod:`concurrent.futures` by adding an internal `threading._register_atexit()`, which calls registered functions prior to joining all non-daemon threads. This allows for compatibility with subinterpreters, which don't support daemon threads.
* bpo-39678: refactor queue manager thread (GH-18551)Thomas Moreau2020-03-011-207/+229
|
* bpo-39104: Fix hanging ProcessPoolExecutor on shutdown nowait with pickling ↵Thomas Moreau2020-02-161-21/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | failure (GH-17670) As reported initially by @rad-pat in #6084, the following script causes a deadlock. ``` from concurrent.futures import ProcessPoolExecutor class ObjectWithPickleError(): """Triggers a RuntimeError when sending job to the workers""" def __reduce__(self): raise RuntimeError() if __name__ == "__main__": e = ProcessPoolExecutor() f = e.submit(id, ObjectWithPickleError()) e.shutdown(wait=False) f.result() # Deadlock on get ``` This is caused by the fact that the main process is closing communication channels that might be necessary to the `queue_management_thread` later. To avoid this, this PR let the `queue_management_thread` manage all the closing. https://bugs.python.org/issue39104 Automerge-Triggered-By: @pitrou
* bpo-39349: Add *cancel_futures* to Executor.shutdown() (GH-18057)Kyle Stanley2020-02-021-1/+22
|
* Fix typo in Lib/concurrent/futures/thread.py (GH-13953)ubordignon2019-06-151-1/+1
|
* [3.9] bpo-37116: Use PEP 570 syntax for positional-only parameters. (GH-12620)Serhiy Storchaka2019-06-051-17/+1
| | | Turn deprecation warnings added in 3.8 into TypeError.
* bpo-26903: Limit ProcessPoolExecutor to 61 workers on Windows (GH-13132)Brian Quinlan2019-05-081-0/+14
| | | | Co-Authored-By: brianquinlan <brian@sweetapp.com>
* Don't import wait from connection, it shadows a name (GH-13112)Brian Quinlan2019-05-071-2/+2
| | | (lint cleanup) This import causes an argument parameter to shadow the global import name.
* bpo-36542: Allow to overwrite the signature for Python functions. (GH-12705)Serhiy Storchaka2019-05-061-0/+1
|
* Correct grammar in concurrent/futures/process.py docstring (GH-12761)Thomas Grainger2019-04-121-1/+1
|
* bpo-36492: Deprecate passing some arguments as keyword arguments. (GH-12637)Serhiy Storchaka2019-04-011-1/+16
| | | | | | | | | | | | | | | | | | | | | | Deprecated passing the following arguments as keyword arguments: - "func" in functools.partialmethod(), weakref.finalize(), profile.Profile.runcall(), cProfile.Profile.runcall(), bdb.Bdb.runcall(), trace.Trace.runfunc() and curses.wrapper(). - "function" in unittest.addModuleCleanup() and unittest.TestCase.addCleanup(). - "fn" in the submit() method of concurrent.futures.ThreadPoolExecutor and concurrent.futures.ProcessPoolExecutor. - "callback" in contextlib.ExitStack.callback(), contextlib.AsyncExitStack.callback() and contextlib.AsyncExitStack.push_async_callback(). - "c" and "typeid" in the create() method of multiprocessing.managers.Server and multiprocessing.managers.SharedMemoryServer. - "obj" in weakref.finalize(). Also allowed to pass arbitrary keyword arguments (even "self" and "func") if the above arguments are passed as positional argument.
* bpo-35715: Liberate return value of _process_worker (GH-11514)Dave Chevell2019-03-161-0/+1
| | | | ProcessPoolExecutor workers will hold the return value of their last task in memory until the next task is received. Since the return value has already been propagated to the parent process's Future (or has been discarded by this point), the object can be safely released.
* bpo-33097: Fix submit accepting callable after executor shutdown by ↵Mark Nemec2018-04-101-0/+7
| | | | | | interpreter exit (GH-6144) Executors in concurrent.futures accepted tasks after executor was shutdown by interpreter exit. Tasks were left in PENDING state forever. This fix changes submit to instead raise a RuntimeError.
* bpo-33056 FIX leaking fd in concurrent.futures.ProcessPoolExecutor (#6084)Thomas Moreau2018-03-121-2/+9
|
* bpo-31699 Deadlocks in `concurrent.futures.ProcessPoolExecutor` with ↵Thomas Moreau2018-01-051-49/+159
| | | | | | pickling error (#3895) Fix deadlocks in :class:`concurrent.futures.ProcessPoolExecutor` when task arguments or results cause pickling or unpickling errors. This should make sure that calls to the :class:`ProcessPoolExecutor` API always eventually return.
* bpo-21423: Add an initializer argument to {Process,Thread}PoolExecutor (#4241)Antoine Pitrou2017-11-041-7/+29
| | | | | | * bpo-21423: Add an initializer argument to {Process,Thread}PoolExecutor * Fix docstring
* bpo-31540: Allow passing multiprocessing context to ProcessPoolExecutor (#3682)Thomas Moreau2017-10-031-29/+37
|
* bpo-31326: ProcessPoolExecutor waits for the call queue thread (#3265)Victor Stinner2017-09-011-1/+5
| | | | | | | | | | * bpo-31326: ProcessPoolExecutor waits for the call queue thread concurrent.futures.ProcessPoolExecutor.shutdown() now explicitly closes the call queue. Moreover, shutdown(wait=True) now also join the call queue thread, to prevent leaking a dangling thread. * Fix for shutdown() being called twice.
* bpo-27144: concurrent.futures as_complete and map iterators do not keep ↵Grzegorz Grzywacz2017-09-011-1/+13
| | | | | | | | | | reference to returned object (#1560) * bpo-27144: concurrent.futures as_complie and map iterators do not keep reference to returned object * Some nits. Improve wordings in docstrings and comments, and avoid relying on sys.getrefcount() in tests.
* Issue #27895: Spelling fixes (Contributed by Ville Skyttä).Raymond Hettinger2016-08-301-1/+1
|
* Issue #25523: Further a-to-an corrections new in 3.5Martin Panter2015-11-021-1/+1
|
* Issue #21817: When an exception is raised in a task submitted to a ↵Antoine Pitrou2015-01-171-2/+24
| | | | | | ProcessPoolExecutor, the remote traceback is now displayed in the parent process. Patch by Claudiu Popa.
* Issue #11271: concurrent.futures.Executor.map() now takes a *chunksize*Antoine Pitrou2014-10-041-0/+51
| | | | | argument to allow batching of tasks in child processes and improve performance of ProcessPoolExecutor. Patch by Dan O'Reilly.
* Issue #21362: concurrent.futures does not validate that max_workers is properBrian Quinlan2014-05-171-0/+3
|
* Fix import of SimpleQueue.Richard Oudkerk2013-10-161-1/+2
|
* #18741: merge with 3.3.Ezio Melotti2013-08-171-2/+2
|\
| * #18741: fix more typos. Patch by Févry Thibault.Ezio Melotti2013-08-171-2/+2
| |
* | Issue #17914: Use os.cpu_count() instead of multiprocessing.cpu_count() whereCharles-François Natali2013-06-281-1/+1
| | | | | | | | applicable.
* | Issue #16284: Prevent keeping unnecessary references to worker functions in ↵Andrew Svetlov2012-11-031-0/+4
| | | | | | | | concurrent.futures ThreadPoolExecutor.
* | Fix concurrent.futures docstring typo: "Request Q" -> "Result Q".Mark Dickinson2012-10-201-1/+1
|/
* Issue #12328: Fix multiprocessing's use of overlapped I/O on Windows.Antoine Pitrou2012-03-051-4/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also, add a multiprocessing.connection.wait(rlist, timeout=None) function for polling multiple objects at once. Patch by sbt. Complete changelist from sbt's patch: * Adds a wait(rlist, timeout=None) function for polling multiple objects at once. On Unix this is just a wrapper for select(rlist, [], [], timeout=None). * Removes use of the SentinelReady exception and the sentinels argument to certain methods. concurrent.futures.process has been changed to use wait() instead of SentinelReady. * Fixes bugs concerning PipeConnection.poll() and messages of zero length. * Fixes PipeListener.accept() to call ConnectNamedPipe() with overlapped=True. * Fixes Queue.empty() and SimpleQueue.empty() so that they are threadsafe on Windows. * Now PipeConnection.poll() and wait() will not modify the pipe except possibly by consuming a zero length message. (Previously poll() could consume a partial message.) * All of multiprocesing's pipe related blocking functions/methods are now interruptible by SIGINT on Windows.
* Merge with 3.2 for #12364.Ross Lagerwall2012-01-081-3/+0
|\
| * Issue #12364: Fix a hang in concurrent.futures.ProcessPoolExecutor.Ross Lagerwall2012-01-081-6/+1
| |
| * Close the call queue in concurrent.futures.ProcessPoolExecutor whenAntoine Pitrou2011-07-161-0/+1
| | | | | | | | shutdown() is called, without waiting for the garbage collector to kick in.