`multiprocessing.Pool` fails if command has a long list of arguments (regression in 3.14.3, 3.13.12)
@gpshead y travaille déjà.
Depuis le 7/4/2026.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
A multiprocessing pool can fail to start when the command that starts the pool was ran with a lot of arguments.
Minimal working example:
# mwe.py
import multiprocessing
if __name__ == "__main__":
with multiprocessing.Pool():
pass
Run this using the following script:
#!/bin/bash
PAGE_SIZE=$(getconf PAGE_SIZE)
MAX_ARG_STRLEN=$((32 * PAGE_SIZE))
COUNT=$((MAX_ARG_STRLEN / 100 ))
echo $COUNT
yes "$(printf 'a%.0s' {1..100})" | head -n $COUNT | xargs python3 mwe.py
What this will do is effectively run the following:
python3 mwe.py aaa..a aaa..a aaa..a ... aaa.a
The Python process itself launches correctly, as each argument is only 100 bytes long (way under the maximum argument length of MAX_ARG_STRLEN).
The creation of the multiprocessing pool however fails, because the sys.argv variable is taken, and used to build a single string in multiprocessing.forkserver.ForkServer.ensure_running here: https://github.com/python/cpython/blob/d5cb9f6a9b6f48cc08c4422259498d4fd023357a/Lib/multiprocessing/forkserver.py#L175.
This is caused by a recent change: https://github.com/python/cpython/pull/143717, which was also backported to 3.13 and 3.14. (It works on 3.14.2, fails on 3.14.3).
CPython versions tested on:
3.15, 3.14
Operating systems tested on:
Linux
Linked PRs
- gh-144508
- gh-148194
- gh-148195
- gh-148196
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Évaluation
Cette issue n'a pas encore été évaluée.