[英]Python, thread and gobject
我正在使用pygtk通過框架編寫程序。 主程序做了以下事情:
gobject.Mainloop()
但似乎在我的程序進入Mainloop后,監視程序線程也將無法運行。
我的解決方法是使用gobject.timeout_add
來運行監視器。
但為什么創建另一個線程不起作用?
這是我的代碼:
import gobject
import time
from threading import Thread
class MonitorThread(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
print "Watchdog running..."
time.sleep(10)
def main():
mainloop = gobject.MainLoop(is_running=True)
def quit():
mainloop.quit()
def sigterm_cb():
gobject.idle_add(quit)
t = MonitorThread()
t.start()
print "Enter mainloop..."
while mainloop.is_running():
try:
mainloop.run()
except KeyboardInterrupt:
quit()
if __name__ == '__main__':
main()
程序只輸出“Watchdog running ...輸入mainloop ..”,然后什么都沒有。 進入mainloop后似乎線程永遠不會運行。
你能發一些代碼嗎? 可能是您遇到Global Interpreter Lock問題 。
別人解決了你的問題:) 。 我可以在這里復制粘貼文章,但簡而言之,gtk的c-threads與Python線程沖突。 你需要通過調用gobject.threads_init()來禁用c線程,所有都應該沒問題 。
您無法初始化gtk中基於線程的代碼路徑。
使用PyGTK線程時必須記住兩件事:
- 必須使用gtk.gdk.threads_init初始化GTK線程:
來自http://unpythonic.blogspot.com/2007/08/using-threads-in-pygtk.html ,版權完全由作者保留。 不得刪除此版權聲明。
你可以認為glib / gobject而不是pygtk,它是一樣的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.