Fix: Windows access violation during startup when loading comfy_api_nodes (pydantic-core GC issue)

Aperta Adatta ai principianti
#17,455 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
85/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
backend

Direzione di ricerca

Le modifiche vanno in comfy_api_nodes/apis/__init__.py e nodes.py dentro init_builtin_api_nodes(). Avvolgi le importazioni di modelli e il caricamento dei nodi con gc.disable()/gc.enable() come specificato. Fatto significa che ComfyUI parte su Windows senza la violazione di accesso dopo più esecuzioni.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Problem

On Windows, ComfyUI crashes at startup with Windows fatal exception: access violation while loading the built-in API nodes (comfy_api_nodes). The stack trace points to pydantic's schema generation, triggered during import of comfy_api_nodes/apis/__init__.py (a file with ~1000+ pydantic models).

Root cause

This is a known bug in pydantic-core on Windows: the cyclic garbage collector traverses pydantic-core's internal objects (validators/serializers) while they are still being constructed, corrupting refcounts and causing the access violation. Tracked in pydantic discussion #13839.

Fix

Disable the cyclic GC while constructing all pydantic models in apis/__init__.py and during the loading of built-in API nodes:

In comfy_api_nodes/apis/__init__.py (add at the top):
import gc as _gc
_gc_was_enabled = _gc.isenabled()
_gc.disable()

And at the very end of the file:

if _gc_was_enabled:
    _gc.enable()
In nodes.py -> init_builtin_api_nodes():
import gc
gc_was_enabled = gc.isenabled()
gc.disable()
try:
    for node_file in api_nodes_files:
        if not await load_custom_node(node_file, module_parent="comfy_api_nodes"):
            import_failed.append(os.path.basename(node_file))
finally:
    if gc_was_enabled:
        gc.enable()

Verification

Tested across 8 consecutive startup runs — all completed successfully with no access violations.

Environment

  • Windows 11, Python 3.12.10
  • pydantic 2.14.2, pydantic-core 2.50.2
  • ComfyUI 0.42.5
Lingua principale
Python
Stelle
146k
Fork
17.4k
Merge medio
19h 44m
PR unite (30g)
178

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Comfy-Org/ComfyUI

Tutte le issue di Comfy-Org/ComfyUI

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.