]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/AutoGenWorker.py
BaseTools: Improve the method of checking queue empty
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / AutoGenWorker.py
index 563d91b421cef4df35372b851c0e9291f7c35f6c..017f67639935328c3945cf6aada22374f66ed7c3 100755 (executable)
@@ -24,6 +24,7 @@ import traceback
 import sys\r
 from AutoGen.DataPipe import MemoryDataPipe\r
 import logging\r
+import time\r
 \r
 def clearQ(q):\r
     try:\r
@@ -111,7 +112,11 @@ class AutoGenManager(threading.Thread):
                     break\r
                 if badnews == "Done":\r
                     fin_num += 1\r
+                elif badnews == "QueueEmpty":\r
+                    EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), badnews))\r
+                    self.TerminateWorkers()\r
                 else:\r
+                    EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), badnews))\r
                     self.Status = False\r
                     self.TerminateWorkers()\r
                 if fin_num == len(self.autogen_workers):\r
@@ -227,12 +232,21 @@ class AutoGenWorkerInProcess(mp.Process):
             PlatformMetaFile = self.GetPlatformMetaFile(self.data_pipe.Get("P_Info").get("ActivePlatform"),\r
                                              self.data_pipe.Get("P_Info").get("WorkspaceDir"))\r
             while True:\r
-                if self.module_queue.empty():\r
-                    break\r
                 if self.error_event.is_set():\r
                     break\r
                 module_count += 1\r
-                module_file,module_root,module_path,module_basename,module_originalpath,module_arch,IsLib = self.module_queue.get_nowait()\r
+                try:\r
+                    module_file,module_root,module_path,module_basename,module_originalpath,module_arch,IsLib = self.module_queue.get_nowait()\r
+                except Empty:\r
+                    EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), "Fake Empty."))\r
+                    time.sleep(0.01)\r
+                    continue\r
+                if module_file is None:\r
+                    EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), "Worker get the last item in the queue."))\r
+                    self.feedback_q.put("QueueEmpty")\r
+                    time.sleep(0.01)\r
+                    continue\r
+\r
                 modulefullpath = os.path.join(module_root,module_file)\r
                 taskname = " : ".join((modulefullpath,module_arch))\r
                 module_metafile = PathClass(module_file,module_root)\r
@@ -280,11 +294,11 @@ class AutoGenWorkerInProcess(mp.Process):
                     else:\r
                         self.cache_q.put((Ma.MetaFile.Path, Ma.Arch, "MakeCache", False))\r
 \r
-        except Empty:\r
-            pass\r
-        except:\r
+        except Exception as e:\r
+            EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), str(e)))\r
             self.feedback_q.put(taskname)\r
         finally:\r
+            EdkLogger.debug(EdkLogger.DEBUG_9, "Worker %s: %s" % (os.getpid(), "Done"))\r
             self.feedback_q.put("Done")\r
             self.cache_q.put("CacheDone")\r
 \r