Frage

im die fantastischen eric4 ide zu Python-Code, es ein Werkzeug gebaut bekommt ist in ‚Zyklop‘ genannt, die offenbar für Zyklen suchen. Nachdem er ausgeführt wird, gibt es mir ein Bündel von großen mutigen roten Buchstaben dort erklärt, eine Vielzahl von Zyklen in meinem Code zu sein. Das Problem ist der Ausgang fast entzifferbar ist, gibt es keine Möglichkeit, im gonna verstehen, was ein Zyklus ist von seinem Ausgang zu lesen. ive durchsucht das Internet nach Stunden und kann nicht scheinen, so viel wie ein Blog-Post zu finden. wenn die Zyklen anhäufen den Profiler und Debugger aufhören zu arbeiten an einem gewissen Punkt: (

.

Meine Frage ist, was Zyklen sind, wie kann ich wissen, wenn im einen Zyklus zu machen, wie vermeide ich Zyklen in Python zu machen. Dank.

War es hilfreich?

Lösung

Ein Zyklus (oder „Referenzen loop“) ist, zwei oder mehr Objekte miteinander Bezug genommen wird, z.

alist = []
anoth = [alist]
alist.append(anoth)

oder

class Child(object): pass

class Parent(object): pass

c = Child()
p = Parent()
c.parent = p
p.child = c

Natürlich sind diese extrem einfache Beispiele mit Zyklen von nur zwei Punkten; Beispiele aus der Praxis sind oft länger und schwieriger zu erkennen. Es gibt keine magische Kugel Sie sagen, dass Sie nur einen Zyklus gemacht - Sie müssen nur für sie zu beobachten. Die gc Modul (deren spezifische Aufgabe ist es, garbage -Collect nicht erreichbar Zyklen) können Ihnen helfen, bestehende Zyklen zu diagnostizieren (wenn Sie die entsprechenden Debug-Flags gesetzt). Die WeakRef Modul kann Ihnen helfen, Gebäude Zyklen zu vermeiden wenn Sie brauchen (zB) ein Kind und Eltern umeinander zu wissen, ohne einen Referenzzyklus zu schaffen (nur eine der beiden gegenseitigen Verweise in eine schwache ref oder Proxy, macht oder die handlichen Schwach Wörterbuch Behälter verwenden, die die Modulteile) .

Andere Tipps

Alle Cyclops sagt Ihnen, ob es Objekte in Ihrem Code sind, die durch eine Kette von anderen Objekten zu sich selbst verweisen. Dies war früher ein Problem in Python sein, da der Garbage Collector diese Arten von Objekten nicht richtig handhaben würde. Das Problem war, da zum größten Teil festgelegt.

Fazit:., Wenn Sie nicht ein Speicherleck zu beobachten, Sie brauchen sich nicht um die Ausgabe von Cyclops in den meisten Fällen kümmern

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top