-
Notifications
You must be signed in to change notification settings - Fork 3
/
BurstOfHttpRequests
57 lines (45 loc) · 1.77 KB
/
BurstOfHttpRequests
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Author: ichivite@esri.com
# Tested with ArcGIS for Server 10.2.2
# Latest here: https://github.com/Cintruenigo/ArcGIS-Server-Stuff/blob/master/BurstOfHttpRequests
import os, Queue,threading,time
import urllib
import urllib2
urlFilePath = r"D:\Ismael\Demos\AdminAPI\urls.txt" #Text file containing the URLs you want to be hit. One URL per line
thread_count = 80 #Number of threads to process your file
urlQueue = Queue.Queue()
def main():
print "This script will invoke URLs in " + urlFilePath + " using " + str(thread_count) + " concurrent threads with no think-time"
#Fill Queue containing all urls to be invoked
urlFile = open( urlFilePath, "r" )
for line in urlFile:
urlQueue.put(line)
urlFile.close()
# Create a pool of threads
thread_list = []
for i in range (thread_count):
t = threading.Thread(target=requestURL)
t.daemon = True
thread_list.append(t)
start = time.time()
# Start threads
for thread in thread_list:
#print " Starting new thread... "
thread.start()
# Wait for queue to be emptied
urlQueue.join()
end = time.time()
print "Elapsed time in seconds: " + str(end - start)
def requestURL():
while urlQueue.empty :
try:
url = urlQueue.get()
params = { 'f' : 'pjson'}
qData = urllib.urlencode(params)
req = urllib2.Request(url, qData, {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'})
response = urllib2.urlopen(req)
#print "Response: " + response.read()
urlQueue.task_done()
except Exception as e:
print e.message
if __name__ == "__main__":
main()