Skip to content

Commit d0c3654

Browse files
Create threading program with Google API
1 parent 4ec7218 commit d0c3654

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

script_19.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import requests
2+
from multiprocessing.dummy import Pool
3+
import time
4+
from datadiff import diff
5+
6+
def getzip(code):
7+
try:
8+
code = str(code)
9+
url = "https://maps.googleapis.com/maps/api/geocode/json?address={}".format(code)
10+
res = requests.get(url).json()['results']
11+
if len(res) < 1: # Re-try
12+
print "Retrying"
13+
return getzip(code)
14+
iszip = 'postal_code' in res[0]['types'] and "United States" in str(res[0]['address_components'])
15+
except Exception as e:
16+
print "In error"
17+
print e
18+
iszip = False
19+
return (code, iszip)
20+
ziprange = range(94400, 94420)
21+
print "Range is: " + str(len(ziprange))
22+
23+
print "Using one thread"
24+
start = time.time()
25+
syncres = [getzip(c) for c in ziprange]
26+
print "took " + str(time.time() - start)
27+
28+
print "Using multiple threads"
29+
start = time.time()
30+
31+
# Magic
32+
pool = Pool(10)
33+
asyncres = pool.map(getzip, ziprange)
34+
pool.close()
35+
pool.join()
36+
asyncres = sorted(asyncres)
37+
# End of Magic
38+
39+
print "took " + str(time.time() - start)
40+
41+
# Make sure results are equal
42+
d = diff(syncres, asyncres)
43+
if len(d.diffs) > 0:
44+
print "diff is"
45+
print d
46+
47+
for r in asyncres:
48+
print "Zip code {} is {} US code".format(r[0], "valid" if r[1] else "invalid")

0 commit comments

Comments
 (0)