본문 바로가기
프로그래밍언어/파이썬[Error]

[파이썬][Error] 070. ValueError - generator already executing

by about_IT 2025. 5. 30.
728x90

ValueError: generator already executing 오류는 제너레이터(generator) 내부에서 자신을 다시 호출하거나, 아직 완료되지 않은 상태에서 동시에 여러 번 접근할 때 발생합니다. 파이썬의 제너레이터는 한 번에 하나의 실행 흐름만 처리할 수 있기 때문에, 중첩 호출이나 병렬 호출이 있을 경우 이 오류가 발생합니다.

이 오류는 주로 yield를 사용한 반복 구조에서, 제너레이터 객체를 순회하는 중에 같은 제너레이터를 다시 호출하거나 next()를 동시에 여러 스레드에서 사용할 때 나타납니다.

● 오류 발생 예시

def recursive_gen():
    yield from recursive_gen()

for _ in recursive_gen():
    pass

자신을 재귀적으로 호출하는 제너레이터는 generator already executing 오류를 유발합니다.

ValueError: generator already executing

● 해결 방법

  • 제너레이터 내부에서 자기 자신을 호출하지 않도록 구조 변경
  • 멀티스레드 환경에서는 락(lock) 등으로 동시 접근 방지
  • 중첩 반복문에서 제너레이터를 다시 호출하지 않도록 주의

● 예시 코드 (정상적인 사용)

def simple_gen():
    for i in range(3):
        yield i

for val in simple_gen():
    print(val)

● 자주 하는 실수

  • 제너레이터 내부에서 yield from self 또는 유사한 구조 사용
  • 복수의 쓰레드에서 동일 제너레이터 객체를 공유
  • 순회 중인 제너레이터를 다른 루프에서 재사용

● 결론

ValueError - generator already executing 오류는 제너레이터가 동시에 두 번 이상 실행되었을 때 발생합니다. 제너레이터의 단일 실행 흐름 원칙을 지키고, 복잡한 호출 구조에서는 재귀나 다중 접근을 피하는 것이 중요합니다.

728x90