Python 3'ün Asyncio kütüphanesiyle ilgili etrafımı sarmakta güçlük çekiyorum. Bir zipcodes listesi var ve her zipcodes karşılık gelen şehir ve eyalet almak için bir API için async çağrıları yapmaya çalışıyorum. Bunu bir for döngüsü ile başarılı bir şekilde yapabilirim ancak büyük bir zipkod listesi durumunda daha hızlı yapmak istiyorum. Asyncio ile birden çok arama yapmak ve sonucu bir sözlüke eklemek
Bu
Bu çok takdir edilirimport asyncio
import urllib.request, json
zips = ['90210', '60647']
zip_cities = dict()
@asyncio.coroutine
def get_cities(zipcodes):
url = 'http://maps.googleapis.com/maps/api/geocode/json?address='+zipcode+'&sensor=true'
response = urllib.request.urlopen(url)
string = response.read().decode('utf-8')
data = json.loads(string)
city = data['results'][0]['address_components'][1]['long_name']
state = data['results'][0]['address_components'][3]['long_name']
zip_cities.update({idx: [zipcode, city, state]})
loop = asyncio.get_event_loop()
loop.run_until_complete([get_cities(zip) for zip in zips])
loop.close()
print(zip_cities) # doesnt work
Herhangi bir yardım zaman uyumsuz bunu yapmaya çalışıyorum benim korkunç işlevsel olmayan girişimdir
import urllib.request, json
zips = ['90210', '60647']
def get_cities(zipcodes):
zip_cities = dict()
for idx, zipcode in enumerate(zipcodes):
url = 'http://maps.googleapis.com/maps/api/geocode/json?address='+zipcode+'&sensor=true'
response = urllib.request.urlopen(url)
string = response.read().decode('utf-8')
data = json.loads(string)
city = data['results'][0]['address_components'][1]['long_name']
state = data['results'][0]['address_components'][3]['long_name']
zip_cities.update({idx: [zipcode, city, state]})
return zip_cities
results = get_cities(zips)
print(results)
# returns {0: ['90210', 'Beverly Hills', 'California'],
# 1: ['60647', 'Chicago', 'Illinois']}
çalışır benim orijinal bir örnektir. İnternette karşılaştığım tüm dersler kafamın üzerinde biraz farklı görünüyor.
Not: aiohttp
kullanımından bazı örnekler gördüm. Mümkünse yerli Python 3 kütüphaneleri ile uğraşmayı umuyordum.
Bunun için teşekkürler. 'Aiohttp' yolu çok daha temiz. –
@ anthony-dandrea Posta kodu listeniz BÜYÜK olacaksa, aynı anda sayı eşzamanlı istekleri 100 bağlantı gibi bir sane numarasına sınırlamanızı da öneririm, aksi halde engellenebilirsiniz. * Deneyimden * konuşma * - –