Python에서 함수에 액세스하고 스레딩 미디어 및 서보 하위 프로세스 중지

이 주제에 대해 몇 가지 검색을 해왔지만 내 질문에 대한 명확한 답변이없는 것 같습니다. 나는 현재 사용자가 버튼을 클릭하고 그가 파이썬 함수를 호출 reply()하면 함수가 두 개의 다른 스레드 a(오디오를 의미)와 r(루틴을 의미)이 두 스레드가 함께 작동하도록하는 두 개의 스레드를 시작하는 프로젝트를 진행하고 있습니다. 기본적으로 내레이터가 말하는대로지도에서 방향을 가리 킵니다.

def reply(index, path2, path3):
    a = threading.Thread(target=playaudio(path3))
    r = threading.Thread(target=routine(path2))
    r.start()
    a.start()

사용자가 중지 버튼을 클릭 하면 기능에 액세스하고 playaudioroutine기능에 대한 스레드를 모두 중지 할 수있는 방법이 있는지 궁금합니다 . 사용자가 더 이상보고 싶지 않으면 프레젠테이션을 중지하기 만하면됩니다. . 두 가지 기능은 다음과 같이 설정됩니다.

# play audio function starts here:
def playaudio(path):
    try:
        subprocess.Popen(["mpg123", path])

    except Exception as ex:
        tkMessageBox.showinfo('Error', 'An error occurred.  ' + str(ex))

# routine function starts here
# routine controls the servo module
def routine(path):
    with open(path, 'rb') as f:
        reader = csv.reader(f)
        settings = list(reader)

    print(settings)
    i = 1
    while i < (len(settings) - 1):
        try:
            setall(int(settings[i][1]), int(settings[i][2]), int(settings[i][3]), int(settings[i][4]))
            delay = float(settings[i+1][0]) - float(settings[i][0]) - 0.015 #includes processing time
            time.sleep(delay)
            i += 1
        except Exception as ex:
            pass
    setall(int(settings[i][1]), int(settings[i][2]), int(settings[i][3]), int(settings[i][4]))

이는 Tkinter.Button메인 화면 요소 로 시작되며 오디오를 재생하고 서보 모듈을 제어합니다.

button = Tkinter.Button(window, text='Audio 4', command=lambda: reply(1, 'path/to/excel/file.csv', '/path/to/audio/file.mp3'))
button.config(width="30", height="5")
button.place(x=490, y=40)

중지 기능의 경우 다른 Tkinter버튼 요소 를 추가하는 것이 해결책이 될 것이라고 생각 했지만 subprocess사용자가 클릭 할 때마다 종료하는 다른 기능이 있습니다.

stop_button = Tkinter.Button(window, text='Stop Audio', command=lambda: stop())
stop_button.config(width="30", height="5")
stop_button.place(x=490, y=360)

실제 stop()기능을 위해 stop()같은 몇 가지 방법을 시도했지만 destroy()오디오 또는 서보가 계속 실행되거나 실제 프로그램이 종료됩니다.

그래서 내 질문은, 내가 다르게 무엇을해야 하는가? 이 문제에 대한 의견을 보내 주시면 감사하겠습니다.

라울 스 니만

큐 모듈 을 살펴 보셨습니까 ? 스레드에 메시지를 보낼 수 있습니다.

따라서 스레드 함수에 액세스 할 수있는 q(의 인스턴스 Queue) 가 있다고 가정하면 routine()스레드 함수는 다음과 같이 보일 수 있습니다.

def routine(path):

    # skip some stuff...

    while i < (len(settings) - 1):
        if not q.empty():
            message = q.get()
            if message == 'stop':
                break

        # rest of your function

당신의에서 playaudio()기능 당신은 지키고 싶을 것이다 Popen사용자가 만든 객체와 프로세스를 종료하기 위해 '종료 () 메서드를 사용합니다. 이를 수행하는 방법에 대한 자세한 정보 하위 프로세스 문서를 참조하십시오.

그런 다음 사용자가 "중지"버튼을 클릭하면 큐에 메시지를 게시 할 수 있습니다.

def stop():
    q.put('stop')

제쳐두고 다중 프로세스 모듈도 살펴보십시오. Python의 GIL은 스레딩이 제대로 발생하지 않도록 방지하고 다중 프로세스는이를 우회하여 다중 코어를 사용할 수 있습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 Django 앱에서 Celery의 하위 프로세스 stdout 및 stderr에 액세스

분류에서Dev

Windows에서 지정된 IP 주소에 액세스하는 프로그램 및 프로세스 ID를 어떻게 알 수 있습니까?

분류에서Dev

Python에서 g ++ 및 하위 프로세스 사용

분류에서Dev

jQuery에서 PHP $ _SESSION 변수에 액세스하고 오류 처리 및 페이지 리디렉션 수행

분류에서Dev

GNU / Linux 기반 시스템에서 어떤 프로세스가 하드 디스크에 액세스하는지 어떻게 알 수 있습니까?

분류에서Dev

프로세스에서 스레드 및 시스템 호출을 추적하기위한 Linux 터미널 명령

분류에서Dev

Python 하위 프로세스는 다른 프로세스에서 사용하고 있기 때문에 .bat 파일에 액세스 할 수 없습니다.

분류에서Dev

Python : MultiProcess Function 내의 스레딩은 다중 프로세스 하나 또는 상위 항목과 동일한 코어에서 실행됩니까?

분류에서Dev

Rails 5는 매번 데이터베이스를 쿼리하지 않고 세션 내 어디서나 프로필 데이터에 액세스합니다.

분류에서Dev

원격 호스트에 대한 하위 프로세스 로그인 및 Python에서 나오지 않음

분류에서Dev

자바 프로세스 : 단일 스레드에서 하위 프로세스의 stdout 및 stderr 읽기

분류에서Dev

클래스에서 실행중인 하위 프로세스 중지

분류에서Dev

Python 하위 프로세스 popen에서 명령 서식 지정

분류에서Dev

websocket 메시지에서 스프링 보안 및 액세스 주체를 사용하여 Spring-Webscoket 보안

분류에서Dev

스레드 된 하위 프로세스에서 다른 하위 프로세스로 입력 보내기

분류에서Dev

ctypes를 사용하는 .dll의 Python에서 C ++ 함수-함수를 찾을 수 없음 및 액세스 위반

분류에서Dev

하위 프로세스에서 보케 서버를 실행할 때 주어진 인수에 액세스 할 수 있습니까?

분류에서Dev

macOS에서 특정 IP 주소에 액세스하는 프로그램 및 프로세스 ID를 어떻게 알 수 있습니까?

분류에서Dev

Perl forking 후 상위에서 여러 하위 프로세스 중지

분류에서Dev

Chromium Embedded에서 하위 프로세스로 실행 중인지 어떻게 감지합니까?

분류에서Dev

function.js의 익스프레스 및 노드 js에서 세션 변수에 액세스하는 방법

분류에서Dev

액세스를 설치하지 않고 Excel에서 쿼리에 액세스

분류에서Dev

Windows에서 중괄호를 인수로 전달하지 않는 Python 하위 프로세스

분류에서Dev

호출 가능에서 프로세스 스레드 시작 및 중지

분류에서Dev

class.function ()을 사용하지 않고 Python에서 클래스의 함수에 액세스합니까?

분류에서Dev

Python 다중 처리 대 주 프로세스에서 time.sleep 하위 프로세스 중단

분류에서Dev

중첩 함수 내에서 부모 변수에 액세스하는 Python

분류에서Dev

상위 프로세스에서 Python Multiprocessing.Process 하위 클래스의 상태에 액세스

분류에서Dev

슬라이딩 div에서 텍스트 줄 바꿈 및 세로 중앙 텍스트를 중지하는 방법

Related 관련 기사

  1. 1

    내 Django 앱에서 Celery의 하위 프로세스 stdout 및 stderr에 액세스

  2. 2

    Windows에서 지정된 IP 주소에 액세스하는 프로그램 및 프로세스 ID를 어떻게 알 수 있습니까?

  3. 3

    Python에서 g ++ 및 하위 프로세스 사용

  4. 4

    jQuery에서 PHP $ _SESSION 변수에 액세스하고 오류 처리 및 페이지 리디렉션 수행

  5. 5

    GNU / Linux 기반 시스템에서 어떤 프로세스가 하드 디스크에 액세스하는지 어떻게 알 수 있습니까?

  6. 6

    프로세스에서 스레드 및 시스템 호출을 추적하기위한 Linux 터미널 명령

  7. 7

    Python 하위 프로세스는 다른 프로세스에서 사용하고 있기 때문에 .bat 파일에 액세스 할 수 없습니다.

  8. 8

    Python : MultiProcess Function 내의 스레딩은 다중 프로세스 하나 또는 상위 항목과 동일한 코어에서 실행됩니까?

  9. 9

    Rails 5는 매번 데이터베이스를 쿼리하지 않고 세션 내 어디서나 프로필 데이터에 액세스합니다.

  10. 10

    원격 호스트에 대한 하위 프로세스 로그인 및 Python에서 나오지 않음

  11. 11

    자바 프로세스 : 단일 스레드에서 하위 프로세스의 stdout 및 stderr 읽기

  12. 12

    클래스에서 실행중인 하위 프로세스 중지

  13. 13

    Python 하위 프로세스 popen에서 명령 서식 지정

  14. 14

    websocket 메시지에서 스프링 보안 및 액세스 주체를 사용하여 Spring-Webscoket 보안

  15. 15

    스레드 된 하위 프로세스에서 다른 하위 프로세스로 입력 보내기

  16. 16

    ctypes를 사용하는 .dll의 Python에서 C ++ 함수-함수를 찾을 수 없음 및 액세스 위반

  17. 17

    하위 프로세스에서 보케 서버를 실행할 때 주어진 인수에 액세스 할 수 있습니까?

  18. 18

    macOS에서 특정 IP 주소에 액세스하는 프로그램 및 프로세스 ID를 어떻게 알 수 있습니까?

  19. 19

    Perl forking 후 상위에서 여러 하위 프로세스 중지

  20. 20

    Chromium Embedded에서 하위 프로세스로 실행 중인지 어떻게 감지합니까?

  21. 21

    function.js의 익스프레스 및 노드 js에서 세션 변수에 액세스하는 방법

  22. 22

    액세스를 설치하지 않고 Excel에서 쿼리에 액세스

  23. 23

    Windows에서 중괄호를 인수로 전달하지 않는 Python 하위 프로세스

  24. 24

    호출 가능에서 프로세스 스레드 시작 및 중지

  25. 25

    class.function ()을 사용하지 않고 Python에서 클래스의 함수에 액세스합니까?

  26. 26

    Python 다중 처리 대 주 프로세스에서 time.sleep 하위 프로세스 중단

  27. 27

    중첩 함수 내에서 부모 변수에 액세스하는 Python

  28. 28

    상위 프로세스에서 Python Multiprocessing.Process 하위 클래스의 상태에 액세스

  29. 29

    슬라이딩 div에서 텍스트 줄 바꿈 및 세로 중앙 텍스트를 중지하는 방법

뜨겁다태그

보관