Python을 사용하여 다중 처리 풀에서 키보드 중단 처리
KeyboardInterrupt 처리는 병렬 프로세스를 효과적으로 관리하는 데 중요합니다. 다중 처리 라이브러리는 작업을 동시에 실행할 수 있는 작업자 프로세스 풀을 만드는 방법을 제공합니다. 그러나 이러한 프로세스를 실행하는 동안 KeyboardInterrupt가 시작되면 문제가 발생합니다.
문제:
주어진 Python 코드에서 Pool이 생성되고 시도 try-Exception 블록을 사용하여 KeyboardInterrupts를 처리하도록 만들어졌습니다. 그러나 Except 블록 내의 해당 코드는 실행되지 않아 프로그램이 정지됩니다.
<code class="python">try: results = pool.map(slowly_square, range(40)) except KeyboardInterrupt: pool.terminate() print("You cancelled the program!") sys.exit(1)</code>
원인:
이 문제는 Python의 버그로 인해 발생합니다. threading.Condition.wait()에서 조건을 기다리는 동안에는 KeyboardInterrupt가 전송되지 않습니다. 다중 처리 라이브러리에서 풀은 조건 변수를 사용하여 map() 작업의 결과를 기다립니다. KeyboardInterrupt가 발생하면 조건 변수 wait()가 반환되지 않으므로 인터럽트가 처리되지 않습니다.
해결책:
이 문제를 해결하려면 해결 방법 결과를 기다릴 때 시간 제한을 지정하는 것입니다. 이는 map() 호출을 map_async().get(timeout)으로 바꾸면 달성할 수 있습니다. 여기서 시간 초과는 큰 값으로 설정됩니다.
<code class="python">results = pool.map_async(slowly_square, range(40)).get(9999999)</code>
시간 초과를 지정하면 조건 변수 wait() KeyboardInterrupt가 처리되지 않은 경우에도 반환됩니다. 이를 통해 Except 블록이 실행되어 풀이 종료되고 인터럽트가 정상적으로 처리될 수 있습니다.
위 내용은 Python을 사용하여 다중 처리 풀에서 키보드 중단을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!