[Libreoffice-commits] core.git: bin/get-bugzilla-attachments-by-mimetype

jorendc joren.libreoffice at telenet.be
Sun Jan 26 12:03:29 PST 2014


 bin/get-bugzilla-attachments-by-mimetype |   58 ++++++++++++++++++++++++++-----
 1 file changed, 50 insertions(+), 8 deletions(-)

New commits:
commit 06e9730b0347ef6c9dffea9508d7139c230a3e92
Author: jorendc <joren.libreoffice at telenet.be>
Date:   Wed Dec 18 01:12:58 2013 +0100

    Add basic multi-threading for each mimetype
    
    Change-Id: Ife0766ddd259bb7d86a9c7bdcf3e9c2849208cf0
    Reviewed-on: https://gerrit.libreoffice.org/7123
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>
    Tested-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/bin/get-bugzilla-attachments-by-mimetype b/bin/get-bugzilla-attachments-by-mimetype
index 5f061c6..3480713 100755
--- a/bin/get-bugzilla-attachments-by-mimetype
+++ b/bin/get-bugzilla-attachments-by-mimetype
@@ -27,6 +27,7 @@ import re
 import os, os.path
 import stat
 import sys
+import threading, Queue
 try:
     from urllib.request import urlopen
 except:
@@ -450,14 +451,55 @@ common_noncore_mimetypes = {
     'application/pdf': 'pdf',
 }
 
-for (prefix, uri) in rss_bugzillas.items():
-    for (mimetype,extension) in mimetypes.items():
-        # It seems that bugzilla has problems returing that many results
-        # (10000 results is probably a limit set somewhere) so we always
-        # end processing the complete list.
-        if mimetype == 'text/html' and prefix == 'moz':
-                continue
-        get_through_rss_query(uri, mimetype, prefix, extension)
+class manage_threads(threading.Thread):
+    def run(self):
+        #print(threading.current_thread().get_ident())
+        while 1:
+            # Try to receive a job from queue
+            try:
+                # Get job from queue
+                # Use job parameters to call our query
+                # Then let the queue know we are done with this job
+                job = jobs.get(True,5)
+                get_through_rss_query(job[0], job[1], job[2], job[3]) # [0] = uri; [1] = mimetype; [2] = prefix; [3] = extension
+                jobs.task_done()
+            except KeyboardInterrupt:
+                raise # Ctrl+C should work
+            except:
+                break
+
+def generate_multi_threading():
+    for (prefix, uri) in rss_bugzillas.items():
+
+        # Initialize threads
+        for i in xrange(max_threads):
+            manage_threads().start()
+
+        # Create a job for every mimetype for a bugzilla
+        for (mimetype,extension) in mimetypes.items():
+
+
+            # It seems that bugzilla has problems returing that many results
+            # (10000 results is probably a limit set somewhere) so we always
+            # end processing the complete list.
+            if mimetype == 'text/html' and prefix == 'moz':
+                    continue
+
+            try:
+                jobs.put([uri, mimetype, prefix, extension], block=True, timeout=3)
+                print("successfully placed a job in the queue searching for " + mimetype + "in bugtracker " + prefix)
+            except KeyboardInterrupt:
+                raise # Ctrl+C should work
+            except:
+                print("Queue full")
+
+        # Continue when all mimetypes are done for a bugzilla
+        jobs.join()
+
+max_threads = 20 # Number of threads to create, (1 = without multi-threading)
+jobs = Queue.Queue(40)
+
+generate_multi_threading()
 
 for (mimetype,extension) in mimetypes.items():
     get_through_rpc_query(redhatrpc, redhatbug, mimetype, "rhbz", extension)


More information about the Libreoffice-commits mailing list