2011-06-07 22 views
1

我有一些麻煩試圖從子進程回調webkit函數。此代碼旨在加載背景資源並通過javascript異步插入它們。一旦資源被加載,我需要回調JavaScript函數,同時保持接口的工作。我嘗試通過管道同步線程,但主線程中的while(1)輪詢(讀取管道)以與資源在主文件中加載相同的方式阻塞了該接口。如果我從子進程回調的webview.execute_script用JavaScript它什麼都不做,除了當我像funcion警報餵養它,然後打破:SPython + webkit + os.fork()

爲例進行說明:

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!" 

提前感謝!

回答

0

webkit不是線程安全的。

參見:http://markmail.org/message/4dwft6s6g6ptavj6

+0

哦!我明白了,是有交際的那doent需要輪詢蟒蛇線程之間的任何方法?問題是我是Python的新手。我在javascript中尋找事件監聽器之類的東西,所以我可以聲明一個監聽器,在一個線程中做一些事情,並在main中調用監聽器。那可能嗎?非常感謝 – 2011-06-07 12:51:42