Multiprocessing exitcode=None after join
Offen
Dieses Issue hat noch niemand übernommen.
stdlib
topic-multiprocessing
type-bug
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug report
Bug description:
I sometimes observe exitcode=None after joining a process.
import multiprocessing as mp
import sys
import threading
sys.setswitchinterval(1e-6)
ctx = mp.get_context("fork")
failures = []
def lifecycle(n_iters=100, n_procs=4):
for _ in range(n_iters):
ps = [ctx.Process(target=int, daemon=True) for _ in range(n_procs)]
for p in ps:
p.start()
for p in ps:
p.join()
if p.exitcode is None:
failures.append(p.pid)
ts = [threading.Thread(target=lifecycle) for _ in range(2)]
for t in ts:
t.start()
for t in ts:
t.join()
print(f"{len(failures)}/{2*100*4} had exitcode=None after join()")
CPython versions tested on:
3.13
Operating systems tested on:
Linux
Linked PRs
- gh-150360
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie damit, den bereitgestellten Linux Python 3.13-Reproducer auszuführen, wobei Sie sich auf multiprocessing mit dem fork-Kontext und nebenläufige Lebenszyklusaufrufe konzentrieren. Prüfen Sie den verknüpften PR gh-150360 und verifizieren Sie, dass das Joinen eines Prozesses konsistent einen exitcode ungleich None liefert, ohne den Threading-Fall zu beeinträchtigen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- operating-systems
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 25/100