Expected python bug using multiprocessing and inheritance

Offen
#96,469 2 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
python

Rechercherichtung

Beginne damit, den bereitgestellten Reproducer unter Python 3.9.12 auszuführen und nachzuverfolgen, wie multiprocessing das gebundene Ziel super().process im Child-Prozess behandelt. Vergleiche dies mit dem expliziten Ziel A.process; als abgeschlossen gilt die Änderung, wenn der Aufruf der Oberklasse nicht mehr rekursiv erfolgt und das erwartete Verhalten von multiprocessing erhalten bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

stdlib type-bug

This is a bug report:

import time
import multiprocessing as mp
class A(object):
    def __init__(self, childnodes, **kwargs) -> None:
        self._childnodes = childnodes
        self._kwargs = kwargs

    def process(self, datablock, meta):
        print("Hello")
        time.sleep(1)
        print("world")

class B(A):
    def process(self, datablock, meta):
        print("before")
        mp.Process(target=super().process, args=(self, datablock, meta)).start()
        print("after")

if __name__ == "__main__":
    b = B([1,2,3])
    b.process([4,5,6], {'foo':42})

This seems to run forerever which is not expected. Reason seems to be that that somehow, super().process actually calls B.process instead of A.process in the subprocess. This is not expected behaviour. As additional evidence towards that, the program behaviour can be corrected by changing

mp.Process(target=super().process, args=(self, datablock, meta)).start()`meta)).start()

with

mp.Process(target=A.process, args=(self, datablock, meta)).start()

Machine:
MacBook Pro (16-inch, 2021)
MacOS Monteray 12.5
Chip: Apple M1 Max
Python version: 3.9.12

Vorherrschende Sprache
Python
Sterne
77.2k
Forks
36k
Ø Merge
1 T. 9 Std.
Gemergte PRs (30 T.)
558

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus python/cpython

Alle Issues in python/cpython

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.