Python+;webkit&x2B;os.fork()

Python+;webkit&x2B;os.fork(),python,webkit,webview,fork,Python,Webkit,Webview,Fork,我在尝试从子进程回调webkit函数时遇到一些问题。此代码旨在加载后台资源并通过javascript异步插入它们。我需要在加载资源后回调javascript函数,同时保持接口正常工作。我试图通过管道同步线程,但主线程中的while(1)轮询(读取管道)阻塞接口的方式与在主线程中加载资源的方式相同。如果我使用javascript从子进程回调webview.execute_脚本,它不会做任何事情,除非我向它提供类似于函数的警报,然后中断:S 举例如下: import pygtk py

我在尝试从子进程回调webkit函数时遇到一些问题。此代码旨在加载后台资源并通过javascript异步插入它们。我需要在加载资源后回调javascript函数,同时保持接口正常工作。我试图通过管道同步线程,但主线程中的while(1)轮询(读取管道)阻塞接口的方式与在主线程中加载资源的方式相同。如果我使用javascript从子进程回调webview.execute_脚本,它不会做任何事情,除非我向它提供类似于函数的警报,然后中断: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!"

提前谢谢

webkit不是线程安全的


请参阅:

哦!,我明白了,在python中有没有不需要轮询的线程间通信方法?问题是我是python的新手。我正在搜索javascript中的事件侦听器之类的东西,这样我就可以取消侦听器的权限,在线程中执行任务,并在main中调用侦听器。可能吗?非常感谢