Python + webkit + os.fork()

1 投票
1 回答
704 浏览
提问于 2025-04-16 19:05

我在尝试从子进程调用webkit函数时遇到了一些麻烦。这段代码是用来加载后台资源,并通过JavaScript异步插入这些资源的。我需要在资源加载完成后回调JavaScript函数,同时保持界面可以正常工作。我尝试通过管道来同步线程,但主线程中的while(1)轮询(用来读取管道)会阻塞界面,就像资源在主线程中加载一样。如果我从子进程回调webview.execute_script并传入JavaScript,它什么都不做,只有在我传入一个像alert这样的函数时才会出错 :S

举个例子:

    import pygtk
    pygtk.require("2.0")

    import gtk,webkit,os

    class Browser:
        def __init__(self):
            self.window = gtk.Window()
            #self.window.set_decorated(False)
            self.window.set_default_size(800, 600)
            vbox = gtk.VBox()
            self.scroll_window = gtk.ScrolledWindow()
            self.webview = webkit.WebView()
            self.webview.set_transparent(True)
            self.window.add(self.webview)
            self.window.show_all()
            self.webview.load_uri("http://google.es");
            self.error();

        def error(self):
            child_pid = os.fork()
            if child_pid == 0:
                self.webview.execute_script("""
                    alert(1);
                """)
                os._exit(0)

        def noerror(self):
            self.webview.execute_script("""
                alert(1);
            """)

    if __name__ == "__main__":
        browser = Browser()
        try:
          while True:
              gtk.main_iteration()
        except:
          gtk.main_quit()
          print "BAILING OUT!"

提前谢谢你们!

1 个回答

0

webkit 不是线程安全的。

详情请查看: http://markmail.org/message/4dwft6s6g6ptavj6

撰写回答