瀏覽代碼

Nicer polling of output events

Yentl Van Tendeloo 8 年之前
父節點
當前提交
e56cab35a9
共有 1 個文件被更改,包括 11 次插入6 次删除
  1. 11 6
      wrappers/modelverse.py

+ 11 - 6
wrappers/modelverse.py

@@ -67,14 +67,14 @@ mode = MODE_UNCONNECTED
 prev_mode = None
 current_model = None
 registered_metamodels = {}
-outputs = Queue.Queue()
+outputs = []
 
 def _output_thread(outputs):
     while taskname is None:
         time.sleep(0.1)
 
     while 1:
-        outputs.put(json.loads(urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "get_output", "taskname": taskname}))).read()))
+        outputs.append(json.loads(urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "get_output", "taskname": taskname}))).read()))
 
 thrd = threading.Thread(target=_output_thread, args=[outputs])
 thrd.daemon = True
@@ -183,7 +183,11 @@ def _compile_model(code):
 def _output(expected=None):
     try:
         global last_output
-        last_output = outputs.get()
+
+        while not outputs:
+            time.sleep(0.01)
+
+        last_output = outputs.pop(0)
         #print("[OUT] %s" % last_output)
     except:
         raise UnknownError()
@@ -268,13 +272,12 @@ def init(address_param="http://127.0.0.1:8001", timeout=20.0):
     """Starts up the connection to the Modelverse."""
     global mode
     global address
-    global taskname
     address = address_param
     start_time = time.time()
-    taskname = random.random()
+    task = random.random()
     while 1:
         try:
-            _input_raw('"%s"' % taskname, "task_manager")
+            _input_raw('"%s"' % task, "task_manager")
             mode = MODE_UNAUTHORIZED
             break
         except URLError as e:
@@ -282,6 +285,8 @@ def init(address_param="http://127.0.0.1:8001", timeout=20.0):
                 raise ConnectionError(e.reason)
             else:
                 time.sleep(0.1)
+    global taskname
+    taskname = task
 
 def login(username, password):
     """Log in a user, if user doesn't exist, it is created."""