Python + webkit + os.fork () - PullRequest
1 голос
/ 07 июня 2011

У меня возникли проблемы при попытке вызвать функции webkit из дочернего процесса. Этот код предназначен для загрузки фоновых ресурсов и асинхронной вставки их с помощью JavaScript. Мне нужно вызывать функции javascript, как только ресурс загружен, в то время как интерфейс работает. Я пытался синхронизировать потоки по каналам, но опрос while (1) в основном потоке (для чтения канала) блокирует интерфейс так же, как если бы ресурс был загружен в основной поток. Если я перезвоню webview.execute_script с помощью javascript из дочернего процесса, он ничего не делает, кроме случаев, когда я передаю его с предупреждением, подобным funcion, а затем прерывается: 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 голосов
/ 07 июня 2011

webkit не является поточно-ориентированным.

См .: http://markmail.org/message/4dwft6s6g6ptavj6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...