X-Git-Url: http://git.vrable.net/?p=bluesky.git;a=blobdiff_plain;f=cleaner%2Fazure.py;h=7a07694cd772ec338028ea98ea993a6927eaa162;hp=89b4f23fbc52c8ce4521cb75f2878370386354b1;hb=fa2344c8e4f01f2a44dd44bed9448934d318fe84;hpb=e008fe66739a866e6871521870d7163c488f2a75 diff --git a/cleaner/azure.py b/cleaner/azure.py index 89b4f23..7a07694 100644 --- a/cleaner/azure.py +++ b/cleaner/azure.py @@ -148,6 +148,34 @@ class AzureConnection: path = "/%s/%s" % (container, key) r = self._make_request(path, method='DELETE') +def parallel_delete(container, keys): + import Queue + from threading import Lock, Thread + + keys = list(iter(keys)) + + q = Queue.Queue(16384) + l = Lock() + + def deletion_task(): + conn = AzureConnection() + while True: + k = q.get() + l.acquire() + print k + l.release() + conn.delete(container, k) + q.task_done() + + for i in range(128): + t = Thread(target=deletion_task) + t.setDaemon(True) + t.start() + + for k in keys: + q.put(k) + q.join() + if __name__ == '__main__': container = 'bluesky' conn = AzureConnection() @@ -155,6 +183,4 @@ if __name__ == '__main__': conn.put(container, "testkey", "A" * 40) print "Fetch result:", conn.get(container, "testkey") - for k in list(iter(conn.list(container))): - print "Deleting", k - conn.delete(container, k) + parallel_delete(container, conn.list(container))