Python을 사용하여 다중 처리 풀에서 키보드 중단을 처리하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-10-22 16:35:02
원래의
892명이 탐색했습니다.

How to Handle Keyboard Interruptions in Multiprocessing Pools with Python?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!