컨텍스트 관리자 및 데몬 스레드
초마다 하트비트를 보내도록 되어 있는 컨텍스트 관리자에서 데몬 스레드를 시작하고 있지만 스레드에서 실행 중이기 때문에 예외가 발생하면 컨텍스트 관리자를 종료하지 않습니다. 하트비트가 멈췄을 때 컨텍스트 관리자에서 예외를 발생시키는 방법은 무엇입니까?
으아악이에 대한 예를 찾는 데 문제가 있습니다.
도와주셔서 감사합니다!
정답
업데이트
게시하신 코드와 좀 더 일관성을 갖도록 코드를 수정했습니다. 하지만:
제공하신 코드가 일치하지 않습니다. heartbeat_task
传递了一个事件,如果设置该事件将导致函数返回。但只有当使用 with plc():
创建的函数 main
中的上下文管理器退出时才会设置它,而这是永远不会的。如果您希望 heartbeat_task
抛出的任何异常将强制上下文管理器退出,然后在函数 plc
中捕获,那么调用 stop_event.set()
的意义何在?如果根据定义,我们仅在 heartbeat_task
예외로 인해 코드가 더 이상 존재하지 않는 경우에만 여기에 오셨나요?
그래서 당신은 heartbeat_task
无限期地运行,直到引发异常(在这种情况下,没有“停止”事件的意义),要么您希望能够在存在某些条件时停止 heartbeat_task
,但没有这样做的代码。出于演示目的,我假设 main
将有权访问 stop_event
事件,并在某些情况下对其进行设置。否则,它会一直运行,直到检测到 heartbeat_task
다시는 실행하지 않기를 원합니다. 아마도 예외가 발생했기 때문일 것입니다(무한 루프를 실행하고 있는데 중지 이벤트가 아직 설정되지 않은 경우 어떻게 종료될 수 있습니까?). 나머지는 컨텍스트 관리자를 사용해야 하는 이유입니다. 나중에 대안을 제안하겠습니다.
멀티 스레드 풀을 사용하는 경우(풀에 하나의 스레드만 필요함) 풀에 제출된 작업에 의해 발생한 예외를 메인 스레드가 포착하는 것이 간단해집니다. multiprocessing.pool.threadpool.apply_async
被调用时返回 multiprocessing.pool.asyncresult
实例,表示未来的完成。当在此实例上调用 get
方法时,您可以从辅助函数 (heartbeat_task
) 获取返回值,或者重新引发辅助函数引发的任何异常。但是我们也可以使用 wait
方法来等待提交任务的完成或经过的时间。然后我们可以使用 ready
메소드가 작업 제출 여부를 테스트할 때 5초 정도 기다리면 실제로 완료됩니다(예외 또는 반환으로 인해). 작업이 여전히 실행 중이면 중지하라고 지시할 수 있습니다. 이 데모에서는 약 7초 후에 작업이 예외를 발생시키도록 강제합니다.
인쇄:
으아악컨텍스트 관리자 사용의 대안
으아악위 내용은 컨텍스트 관리자 및 데몬 스레드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Python의 Pandas 라이브러리를 사용할 때는 구조가 다른 두 데이터 프레임 사이에서 전체 열을 복사하는 방법이 일반적인 문제입니다. 두 개의 dats가 있다고 가정 해

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Uvicorn은 HTTP 요청을 어떻게 지속적으로 듣습니까? Uvicorn은 ASGI를 기반으로 한 가벼운 웹 서버입니다. 핵심 기능 중 하나는 HTTP 요청을 듣고 진행하는 것입니다 ...

파이썬에서 문자열을 통해 객체를 동적으로 생성하고 메소드를 호출하는 방법은 무엇입니까? 특히 구성 또는 실행 해야하는 경우 일반적인 프로그래밍 요구 사항입니다.

Linux 터미널에서 Python 사용 ...
