오랫동안 읽기를 기다리는 동안 파이썬 스레드를 종료하십시오.

d3im

스레드를 종료해야하지만 읽기 / 입력을 기다리기 때문에 정기적으로 플래그를 확인할 수 없습니다.

간단한 예 :

import threading, time

class Test(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        print(input("wainting for input: "))

th = Test()
th.start()
time.sleep(5)
print("killing!")
th.join(5)
print(th.is_alive())

보다 실제적인 예는 다음과 같습니다 (정지시 스레드 종료-더 이상 출력되지 않음).

import threading, time

class Test(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def call(args):
        return subprocess.Popen(" ".join(args), shell=True, stderr=subprocess.PIPE)     

    def run(self):
        mainProcess = call([ any program that could hang])
        out = None
        while mainProcess.returncode != 0 or out == '' and mainProcess.poll() != None:
            out = mainProcess.stderr.read(1)
            if out != '':
                sys.stdout.write(out)
                sys.stdout.flush()

th = Test()
th.start()
time.sleep(5)
print("killing!")
th.join(5)
print(th.is_alive())

더 나은 접근법이 있다면 저도 기뻐할 것입니다.

다니엘

다음은 다음을 사용하여 교수형 프로세스 문제를 해결하는 방법의 예입니다 select.

import threading
import select
import subprocess
import sys

def watch_output(args, timeout):
    process = subprocess.Popen(args, stdout=subprocess.PIPE)     
    while True:
        ready_to_read, _, _ = select.select([process.stdout], [], [], timeout)
        if not ready_to_read:
            print "hanging process"
            process.kill()
            break
        out = ready_to_read[0].read(1)
        if not out:
            print "normal exit"
            break
        sys.stdout.write(out)
        sys.stdout.flush()
    return process.wait()

watch_output(['ls'], timeout=10)

또는 시간 제한이있는 입력도 가능합니다.

def read_input(prompt, timeout):
    sys.stdout.write(prompt)
    sys.stdout.flush()
    ready_to_read, _, _ = select.select([sys.stdin], [], [], timeout)
    if not ready_to_read:
        return None
    return ready_to_read[0].readline()

print read_input("wainting for input (4s): ", 4)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

exe가 실행되는 동안 cmd를 종료하십시오.

분류에서Dev

스레드가 오랫동안 기다려야 할 때 backgroundworker를 사용하는 것이 좋습니다.

분류에서Dev

토스트를 오랫동안 보이게하는 방법?

분류에서Dev

오랫동안 뮤텍스를 잠그는 것이 안전한가요?

분류에서Dev

Android에서 UI 스레드를 오랫동안 업데이트하는 경우 사용해야 할 사항

분류에서Dev

FileSystemWatcher.Created 이벤트를 처리하는 동안 파일 읽기 오류가 발생했습니다.

분류에서Dev

제 프로그램이 작동하지 않고 오류 ID가 1 종료 상태를 반환하는 것을 안내하십시오.

분류에서Dev

디렉토리를 만드는 동안 읽기 전용 파일 시스템 오류가 발생합니까?

분류에서Dev

앱이 오랫동안 백그라운드에있을 때 Firestore 수신기가 종료 됨

분류에서Dev

배우가 꽤 오랫동안 메시지를 처리하지

분류에서Dev

grep 종료 코드를 멀리 파이프하십시오.

분류에서Dev

컴퓨터가 종료되는 동안 USB를 켜두십시오.

분류에서Dev

파이썬 팬더 피벗을 사용하는 동안 순서를 유지하십시오

분류에서Dev

pyspark를 사용하여 로컬 시스템에서 파일을 읽는 동안 파일 이름 가져 오기

분류에서Dev

오류 : ssh를 기다리는 동안 작업 흐름이 완료 됨

분류에서Dev

검은 색 화면 + "시스템 업데이트를 설치하는 동안 잠시 기다려주십시오."

분류에서Dev

업그레이드를 시도하는 동안 404 오류

분류에서Dev

업그레이드를 시도하는 동안 404 오류

분류에서Dev

작동하지 않으면 2 분 동안 이전 조건을 기다리는 코드, 파이썬을 사용하여 오류 메시지 발생

분류에서Dev

파이썬에서 오류가 발생하면 모든 스레드를 종료하십시오.

분류에서Dev

GPU를 매우 오랫동안 100 % 사용률로 유지하는 것이 안전합니까?

분류에서Dev

GPU를 매우 오랫동안 100 % 사용률로 유지하는 것이 안전합니까?

분류에서Dev

하이퍼 레저 패브릭에 대한 플랫폼 별 바이너리를 다운로드하는 동안 오류가 발생했습니다.

분류에서Dev

마커로드를 기다리는 동안 Google지도에로드 이미지 오버레이

분류에서Dev

패키지를 제거하거나 업그레이드하는 동안 PFSense가 "업데이트 시스템을 초기화하는 동안 기다려주십시오"에서 멈춤

분류에서Dev

SpinWait.SpinUntil은 Selnium 요소가 존재하기를 기다리는 동안 종료하는 데 시간 초과보다 훨씬 더 오래 걸립니다.

분류에서Dev

작년의 현재 날짜보다 이전 인 테이블의 모든 레코드를 삭제하지만 지난 2 년 동안 지정된 월의 종료 날짜는 삭제하지 마십시오.

분류에서Dev

setFlash 메시지를 더 오랫동안 표시하고 싶습니다 (3000이 아닌 2000)

분류에서Dev

루프가 mysql 가져 오기를 기다리는 동안 Bash

Related 관련 기사

  1. 1

    exe가 실행되는 동안 cmd를 종료하십시오.

  2. 2

    스레드가 오랫동안 기다려야 할 때 backgroundworker를 사용하는 것이 좋습니다.

  3. 3

    토스트를 오랫동안 보이게하는 방법?

  4. 4

    오랫동안 뮤텍스를 잠그는 것이 안전한가요?

  5. 5

    Android에서 UI 스레드를 오랫동안 업데이트하는 경우 사용해야 할 사항

  6. 6

    FileSystemWatcher.Created 이벤트를 처리하는 동안 파일 읽기 오류가 발생했습니다.

  7. 7

    제 프로그램이 작동하지 않고 오류 ID가 1 종료 상태를 반환하는 것을 안내하십시오.

  8. 8

    디렉토리를 만드는 동안 읽기 전용 파일 시스템 오류가 발생합니까?

  9. 9

    앱이 오랫동안 백그라운드에있을 때 Firestore 수신기가 종료 됨

  10. 10

    배우가 꽤 오랫동안 메시지를 처리하지

  11. 11

    grep 종료 코드를 멀리 파이프하십시오.

  12. 12

    컴퓨터가 종료되는 동안 USB를 켜두십시오.

  13. 13

    파이썬 팬더 피벗을 사용하는 동안 순서를 유지하십시오

  14. 14

    pyspark를 사용하여 로컬 시스템에서 파일을 읽는 동안 파일 이름 가져 오기

  15. 15

    오류 : ssh를 기다리는 동안 작업 흐름이 완료 됨

  16. 16

    검은 색 화면 + "시스템 업데이트를 설치하는 동안 잠시 기다려주십시오."

  17. 17

    업그레이드를 시도하는 동안 404 오류

  18. 18

    업그레이드를 시도하는 동안 404 오류

  19. 19

    작동하지 않으면 2 분 동안 이전 조건을 기다리는 코드, 파이썬을 사용하여 오류 메시지 발생

  20. 20

    파이썬에서 오류가 발생하면 모든 스레드를 종료하십시오.

  21. 21

    GPU를 매우 오랫동안 100 % 사용률로 유지하는 것이 안전합니까?

  22. 22

    GPU를 매우 오랫동안 100 % 사용률로 유지하는 것이 안전합니까?

  23. 23

    하이퍼 레저 패브릭에 대한 플랫폼 별 바이너리를 다운로드하는 동안 오류가 발생했습니다.

  24. 24

    마커로드를 기다리는 동안 Google지도에로드 이미지 오버레이

  25. 25

    패키지를 제거하거나 업그레이드하는 동안 PFSense가 "업데이트 시스템을 초기화하는 동안 기다려주십시오"에서 멈춤

  26. 26

    SpinWait.SpinUntil은 Selnium 요소가 존재하기를 기다리는 동안 종료하는 데 시간 초과보다 훨씬 더 오래 걸립니다.

  27. 27

    작년의 현재 날짜보다 이전 인 테이블의 모든 레코드를 삭제하지만 지난 2 년 동안 지정된 월의 종료 날짜는 삭제하지 마십시오.

  28. 28

    setFlash 메시지를 더 오랫동안 표시하고 싶습니다 (3000이 아닌 2000)

  29. 29

    루프가 mysql 가져 오기를 기다리는 동안 Bash

뜨겁다태그

보관