File tree 1 file changed +24
-6
lines changed
1 file changed +24
-6
lines changed Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env python
2
+ # -*- encoding: utf-8 -*-
3
+
1
4
import sys
2
5
import urllib2
3
6
import os
6
9
import threading
7
10
import Queue
8
11
import re
12
+ import time
9
13
from lib .parser import parse
10
14
11
15
@@ -37,13 +41,15 @@ def __init__(self):
37
41
if "sha1" in entry .keys ():
38
42
self .queue .put ((entry ["sha1" ].strip (), entry ["name" ].strip ()))
39
43
self .lock = threading .Lock ()
44
+ self .thread_count = 20
45
+ self .STOP_ME = False
40
46
41
47
def get_back_file (self ):
42
- while True :
48
+ while not self . STOP_ME :
43
49
try :
44
50
sha1 , file_name = self .queue .get (timeout = 0.5 )
45
51
except :
46
- return
52
+ break
47
53
for i in range (3 ):
48
54
try :
49
55
folder = '/objects/%s/' % sha1 [:2 ]
@@ -59,17 +65,29 @@ def get_back_file(self):
59
65
print '[OK] %s' % file_name
60
66
self .lock .release ()
61
67
break
62
- except KeyboardInterrupt , e :
63
- break
64
68
except urllib2 .HTTPError , e :
65
69
if str (e ).find ('HTTP Error 404' ) >= 0 : break
66
70
except Exception , e :
67
71
pass
72
+ self .exit_thread ()
73
+
74
+ def exit_thread (self ):
75
+ self .lock .acquire ()
76
+ self .thread_count -= 1
77
+ self .lock .release ()
68
78
69
79
def scan (self ):
70
- for i in range (20 ):
80
+ for i in range (self . thread_count ):
71
81
t = threading .Thread (target = self .get_back_file )
72
82
t .start ()
73
83
84
+
74
85
s = Scanner ()
75
- s .scan ()
86
+ s .scan ()
87
+ try :
88
+ while s .thread_count > 0 :
89
+ time .sleep (0.1 )
90
+ except KeyboardInterrupt , e :
91
+ s .STOP_ME = True
92
+ time .sleep (1.0 )
93
+ print 'User Aborted.'
You can’t perform that action at this time.
0 commit comments