首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python、线程和gobject

Python、线程和gobject
EN

Stack Overflow用户
提问于 2009-11-25 12:25:21
回答 1查看 8.6K关注 0票数 6

我正在用pygtk编写一个框架的程序。主程序做以下工作:

  1. 创建一个监视线程来监视某些资源
  2. 创建客户端以从套接字接收数据
  3. 调用gobject.Mainloop()

但是在我的程序进入主循环之后,看门狗线程似乎也无法运行。

我的解决办法是使用gobject.timeout_add来运行监视器。

但是为什么创建另一个线程不起作用呢?

这是我的代码:

代码语言:javascript
复制
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()

程序只输出“看门狗running...Enter主循环..”,然后什么也没有。似乎线程在进入主循环后就不会运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-25 12:34:35

你能贴些密码吗?这可能是因为你对全局解释器锁有问题。

你的问题被别人解决了:)。我可以在这里复制粘贴文章,但简而言之,gtk的c-线程与Python线程发生冲突。您需要通过调用gobject.threads_init()来禁用c-线程,一切都应该可以。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1796588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档