아래 내 테스트 코드에 봐 주시기 바랍니다 클릭하여 문자를 구분합니다 :Python3 GTK3는 변경 버튼 직후
import time
import subprocess
import os,re
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="test")
self.set_default_size(400, 190)
self.set_border_width(10)
fixed = Gtk.Fixed()
self.add(fixed)
self.button2 = Gtk.Button(label='press')
self.button2.connect("clicked", self.aaabbb)
self.button2.set_size_request(100, 20)
fixed.put(self.button2, 170, 10)
def aaabbb(self,widget):
self.button2.set_sensitive(False)
p = subprocess.run(['/bin/bash','-c', '/bin/sleep 5'])
print(p.returncode)
window = MyWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
당신은 당신이 그 버튼을 통지합니다이 간단한 응용 프로그램 서브 프로세스 후 5 초 후에 비활성화됩니다를 실행하는 경우 "sleep 5"완료
질문 - 하위 프로세스를 시작하기 전에 단추를 구분하지 않도록 설정하는 방법?
는 서브 프로세스 호출이 비동기하지 않고 블록 때문에 발생 사전
"다중 처리"를 사용할 수 있습니까 – user1078796
아마도 서브 프로세스에서 gtk 메소드를 호출하지 않으면 아무런 문제가 없을 것입니다. 메인 루프와 통신하고 싶을 때 스트레스가 발생할 것입니다. 파이프는 문제가 있습니다 : "두 프로세스 (또는 스레드)가 동시에 파이프의 동일한 끝에서 읽거나 쓰려고하면 파이프의 데이터가 손상 될 수 있습니다."큐는 "스레드 및 프로세스 안전성이있는 것 같습니다 "비동기 호출이어야 함을 잊지 마십시오. 어쨌든, 당신이 문제를 격리시킬 것을 제안합니다. 멀티 프로세싱을 사용해야하는 구체적인 이유가 없다면 GLib trhreads/thread pools와 async queues를 시도해보십시오. –