update from Atlas
This commit is contained in:
30
concurrency/flags/build_fixture.py
Normal file
30
concurrency/flags/build_fixture.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
"""
|
||||||
|
Build flags fixture
|
||||||
|
"""
|
||||||
|
|
||||||
|
import shutil
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
|
SRC = 'img/'
|
||||||
|
DEST = 'fixture/'
|
||||||
|
|
||||||
|
with open('country-codes.tab') as cc_fp:
|
||||||
|
for line in cc_fp:
|
||||||
|
if line.startswith('#'):
|
||||||
|
continue
|
||||||
|
iso_cc, gec_cc, name = line.strip().split('\t')
|
||||||
|
print(iso_cc, name)
|
||||||
|
cc = iso_cc.lower()
|
||||||
|
img_name = cc + '.gif'
|
||||||
|
from_file = os.path.join(SRC, img_name)
|
||||||
|
to_path = os.path.join(DEST, cc)
|
||||||
|
os.mkdir(to_path)
|
||||||
|
to_file = os.path.join(to_path, img_name)
|
||||||
|
shutil.copyfile(from_file, to_file)
|
||||||
|
tld_cc = 'uk' if cc == 'gb' else cc
|
||||||
|
metadata = {'country': name, 'iso_cc': iso_cc,
|
||||||
|
'tld_cc': '.'+tld_cc, 'gec_cc': gec_cc}
|
||||||
|
|
||||||
|
with open(os.path.join(to_path, 'metadata.json'), 'wt') as json_fp:
|
||||||
|
json.dump(metadata, json_fp, ensure_ascii=True)
|
||||||
19
concurrency/flags/cc_count.py
Normal file
19
concurrency/flags/cc_count.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
from collections import Counter
|
||||||
|
from operator import itemgetter
|
||||||
|
from string import ascii_uppercase
|
||||||
|
|
||||||
|
with open('country-codes.tab') as fp:
|
||||||
|
ct = Counter()
|
||||||
|
for line in fp:
|
||||||
|
if line.startswith('#'):
|
||||||
|
continue
|
||||||
|
cc, _, _ = line.split('\t')
|
||||||
|
ct[cc[0]] += 1
|
||||||
|
print(cc, end=' ')
|
||||||
|
|
||||||
|
for key, value in sorted(ct.items(), key=itemgetter(1), reverse=True):
|
||||||
|
print(key, value)
|
||||||
|
|
||||||
|
print('Total:', sum(ct.values()))
|
||||||
|
print('Missing:', ', '.join(set(ascii_uppercase) - ct.keys()))
|
||||||
36
concurrency/flags/cc_tlds.py
Normal file
36
concurrency/flags/cc_tlds.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
"""
|
||||||
|
Check country code TLDs
|
||||||
|
"""
|
||||||
|
|
||||||
|
import shutil
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
|
iso_cc_db = {}
|
||||||
|
|
||||||
|
with open('country-codes.tab') as cc_fp:
|
||||||
|
for line in cc_fp:
|
||||||
|
if line.startswith('#'):
|
||||||
|
continue
|
||||||
|
iso_cc, gec_cc, name = line.strip().split('\t')
|
||||||
|
iso_cc_db[iso_cc.lower()] = name
|
||||||
|
|
||||||
|
tld_cc_db = {}
|
||||||
|
|
||||||
|
with open('tlds.tab') as cc_fp:
|
||||||
|
for line in cc_fp:
|
||||||
|
if line.startswith('#'):
|
||||||
|
continue
|
||||||
|
tld_cc, category, entity = line.strip().split('\t')
|
||||||
|
if category.strip() != 'country-code':
|
||||||
|
continue
|
||||||
|
if ascii(tld_cc) != repr(tld_cc):
|
||||||
|
continue
|
||||||
|
tld_cc_db[tld_cc[1:].strip()] = entity
|
||||||
|
|
||||||
|
not_tld = iso_cc_db.keys() - tld_cc_db.keys()
|
||||||
|
print(sorted(not_tld))
|
||||||
|
|
||||||
|
for iso_cc, name in sorted(iso_cc_db.items()):
|
||||||
|
entity = tld_cc_db[iso_cc]
|
||||||
|
print('{}\t{}\t{}'.format(iso_cc, name, entity))
|
||||||
848
concurrency/flags/tlds.tab
Normal file
848
concurrency/flags/tlds.tab
Normal file
@@ -0,0 +1,848 @@
|
|||||||
|
# https://www.iana.org/domains/root/db
|
||||||
|
.abogado generic Top Level Domain Holdings Limited
|
||||||
|
.ac country-code Network Information Center (AC Domain Registry) c/o Cable and Wireless (Ascension Island)
|
||||||
|
.academy generic Half Oaks, LLC
|
||||||
|
.accountants generic Knob Town, LLC
|
||||||
|
.active generic The Active Network, Inc
|
||||||
|
.actor generic United TLD Holdco Ltd.
|
||||||
|
.ad country-code Andorra Telecom
|
||||||
|
.adult generic ICM Registry AD LLC
|
||||||
|
.ae country-code Telecommunication Regulatory Authority (TRA)
|
||||||
|
.aero sponsored Societe Internationale de Telecommunications Aeronautique (SITA INC USA)
|
||||||
|
.af country-code Ministry of Communications and IT
|
||||||
|
.ag country-code UHSA School of Medicine
|
||||||
|
.agency generic Steel Falls, LLC
|
||||||
|
.ai country-code Government of Anguilla
|
||||||
|
.airforce generic United TLD Holdco Ltd.
|
||||||
|
.al country-code Electronic and Postal Communications Authority - AKEP
|
||||||
|
.allfinanz generic Allfinanz Deutsche Vermögensberatung Aktiengesellschaft
|
||||||
|
.alsace generic REGION D ALSACE
|
||||||
|
.am country-code Internet Society
|
||||||
|
.amsterdam generic Gemeente Amsterdam
|
||||||
|
.an country-code University of Curacao
|
||||||
|
.android generic Charleston Road Registry Inc.
|
||||||
|
.ao country-code Faculdade de Engenharia da Universidade Agostinho Neto
|
||||||
|
.apartments generic June Maple, LLC
|
||||||
|
.aq country-code Antarctica Network Information Centre Limited
|
||||||
|
.aquarelle generic Aquarelle.com
|
||||||
|
.ar country-code Presidencia de la Nación – Secretaría Legal y Técnica
|
||||||
|
.archi generic STARTING DOT LIMITED
|
||||||
|
.army generic United TLD Holdco Ltd.
|
||||||
|
.arpa infrastructure Internet Architecture Board (IAB)
|
||||||
|
.as country-code AS Domain Registry
|
||||||
|
.asia sponsored DotAsia Organisation Ltd.
|
||||||
|
.associates generic Baxter Hill, LLC
|
||||||
|
.at country-code nic.at GmbH
|
||||||
|
.attorney generic United TLD Holdco, Ltd
|
||||||
|
.au country-code .au Domain Administration (auDA)
|
||||||
|
.auction generic United TLD HoldCo, Ltd.
|
||||||
|
.audio generic Uniregistry, Corp.
|
||||||
|
.autos generic DERAutos, LLC
|
||||||
|
.aw country-code SETAR
|
||||||
|
.ax country-code Ålands landskapsregering
|
||||||
|
.axa generic AXA SA
|
||||||
|
.az country-code IntraNS
|
||||||
|
.ba country-code Universtiy Telinformatic Centre (UTIC)
|
||||||
|
.band generic United TLD Holdco, Ltd
|
||||||
|
.bank generic fTLD Registry Services, LLC
|
||||||
|
.bar generic Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
|
||||||
|
.barclaycard generic Barclays Bank PLC
|
||||||
|
.barclays generic Barclays Bank PLC
|
||||||
|
.bargains generic Half Hallow, LLC
|
||||||
|
.bayern generic Bayern Connect GmbH
|
||||||
|
.bb country-code Government of Barbados Ministry of Economic Affairs and Development Telecommunications Unit
|
||||||
|
.bd country-code Ministry of Post & Telecommunications Bangladesh Secretariat
|
||||||
|
.be country-code DNS Belgium vzw/asbl
|
||||||
|
.beer generic Top Level Domain Holdings Limited
|
||||||
|
.berlin generic dotBERLIN GmbH & Co. KG
|
||||||
|
.best generic BestTLD Pty Ltd
|
||||||
|
.bf country-code ARCE-AutoritÈ de RÈgulation des Communications Electroniques
|
||||||
|
.bg country-code Register.BG
|
||||||
|
.bh country-code Telecommunications Regulatory Authority (TRA)
|
||||||
|
.bi country-code Centre National de l'Informatique
|
||||||
|
.bid generic dot Bid Limited
|
||||||
|
.bike generic Grand Hollow, LLC
|
||||||
|
.bingo generic Sand Cedar, LLC
|
||||||
|
.bio generic STARTING DOT LIMITED
|
||||||
|
.biz generic-restricted NeuStar, Inc.
|
||||||
|
.bj country-code Benin Telecoms S.A.
|
||||||
|
.bl country-code Not assigned
|
||||||
|
.black generic Afilias Limited
|
||||||
|
.blackfriday generic Uniregistry, Corp.
|
||||||
|
.bloomberg generic Bloomberg IP Holdings LLC
|
||||||
|
.blue generic Afilias Limited
|
||||||
|
.bm country-code Registry General Ministry of Labour and Immigration
|
||||||
|
.bmw generic Bayerische Motoren Werke Aktiengesellschaft
|
||||||
|
.bn country-code Telekom Brunei Berhad
|
||||||
|
.bnpparibas generic BNP Paribas
|
||||||
|
.bo country-code Agencia para el Desarrollo de la Información de la Sociedad en Bolivia
|
||||||
|
.boo generic Charleston Road Registry Inc.
|
||||||
|
.boutique generic Over Galley, LLC
|
||||||
|
.bq country-code Not assigned
|
||||||
|
.br country-code Comite Gestor da Internet no Brasil
|
||||||
|
.brussels generic DNS.be vzw
|
||||||
|
.bs country-code The College of the Bahamas
|
||||||
|
.bt country-code Ministry of Information and Communications
|
||||||
|
.budapest generic Top Level Domain Holdings Limited
|
||||||
|
.build generic Plan Bee LLC
|
||||||
|
.builders generic Atomic Madison, LLC
|
||||||
|
.business generic Spring Cross, LLC
|
||||||
|
.buzz generic DOTSTRATEGY CO.
|
||||||
|
.bv country-code UNINETT Norid A/S
|
||||||
|
.bw country-code Botswana Communications Regulatory Authority (BOCRA)
|
||||||
|
.by country-code Reliable Software Inc.
|
||||||
|
.bz country-code University of Belize
|
||||||
|
.bzh generic Association www.bzh
|
||||||
|
.ca country-code Canadian Internet Registration Authority (CIRA) Autorite Canadienne pour les Enregistrements Internet (ACEI)
|
||||||
|
.cab generic Half Sunset, LLC
|
||||||
|
.cal generic Charleston Road Registry Inc.
|
||||||
|
.camera generic Atomic Maple, LLC
|
||||||
|
.camp generic Delta Dynamite, LLC
|
||||||
|
.cancerresearch generic Australian Cancer Research Foundation
|
||||||
|
.canon generic Canon Inc.
|
||||||
|
.capetown generic ZA Central Registry NPC trading as ZA Central Registry
|
||||||
|
.capital generic Delta Mill, LLC
|
||||||
|
.caravan generic Caravan International, Inc.
|
||||||
|
.cards generic Foggy Hollow, LLC
|
||||||
|
.care generic Goose Cross, LLC
|
||||||
|
.career generic dotCareer LLC
|
||||||
|
.careers generic Wild Corner, LLC
|
||||||
|
.cartier generic Richemont DNS Inc.
|
||||||
|
.casa generic Top Level Domain Holdings Limited
|
||||||
|
.cash generic Delta Lake, LLC
|
||||||
|
.cat sponsored Fundacio puntCAT
|
||||||
|
.catering generic New Falls. LLC
|
||||||
|
.cbn generic The Christian Broadcasting Network, Inc.
|
||||||
|
.cc country-code eNIC Cocos (Keeling) Islands Pty. Ltd. d/b/a Island Internet Services
|
||||||
|
.cd country-code Office Congolais des Postes et Télécommunications - OCPT
|
||||||
|
.center generic Tin Mill, LLC
|
||||||
|
.ceo generic CEOTLD Pty Ltd
|
||||||
|
.cern generic European Organization for Nuclear Research ("CERN")
|
||||||
|
.cf country-code Societe Centrafricaine de Telecommunications (SOCATEL)
|
||||||
|
.cg country-code ONPT Congo and Interpoint Switzerland
|
||||||
|
.ch country-code SWITCH The Swiss Education & Research Network
|
||||||
|
.channel generic Charleston Road Registry Inc.
|
||||||
|
.chat generic Sand Fields, LLC
|
||||||
|
.cheap generic Sand Cover, LLC
|
||||||
|
.christmas generic Uniregistry, Corp.
|
||||||
|
.chrome generic Charleston Road Registry Inc.
|
||||||
|
.church generic Holly Fileds, LLC
|
||||||
|
.ci country-code INP-HB Institut National Polytechnique Felix Houphouet Boigny
|
||||||
|
.citic generic CITIC Group Corporation
|
||||||
|
.city generic Snow Sky, LLC
|
||||||
|
.ck country-code Telecom Cook Islands Ltd.
|
||||||
|
.cl country-code NIC Chile (University of Chile)
|
||||||
|
.claims generic Black Corner, LLC
|
||||||
|
.cleaning generic Fox Shadow, LLC
|
||||||
|
.click generic Uniregistry, Corp.
|
||||||
|
.clinic generic Goose Park, LLC
|
||||||
|
.clothing generic Steel Lake, LLC
|
||||||
|
.club generic .CLUB DOMAINS, LLC
|
||||||
|
.cm country-code Cameroon Telecommunications (CAMTEL)
|
||||||
|
.cn country-code Computer Network Information Center, Chinese Academy of Sciences
|
||||||
|
.co country-code .CO Internet S.A.S.
|
||||||
|
.coach generic Koko Island, LLC
|
||||||
|
.codes generic Puff Willow, LLC
|
||||||
|
.coffee generic Trixy Cover, LLC
|
||||||
|
.college generic XYZ.COM LLC
|
||||||
|
.cologne generic NetCologne Gesellschaft für Telekommunikation mbH
|
||||||
|
.com generic VeriSign Global Registry Services
|
||||||
|
.community generic Fox Orchard, LLC
|
||||||
|
.company generic Silver Avenue, LLC
|
||||||
|
.computer generic Pine Mill, LLC
|
||||||
|
.condos generic Pine House, LLC
|
||||||
|
.construction generic Fox Dynamite, LLC
|
||||||
|
.consulting generic United TLD Holdco, LTD.
|
||||||
|
.contractors generic Magic Woods, LLC
|
||||||
|
.cooking generic Top Level Domain Holdings Limited
|
||||||
|
.cool generic Koko Lake, LLC
|
||||||
|
.coop sponsored DotCooperation LLC
|
||||||
|
.country generic Top Level Domain Holdings Limited
|
||||||
|
.cr country-code National Academy of Sciences Academia Nacional de Ciencias
|
||||||
|
.credit generic Snow Shadow, LLC
|
||||||
|
.creditcard generic Binky Frostbite, LLC
|
||||||
|
.cricket generic dot Cricket Limited
|
||||||
|
.crs generic Federated Co-operatives Limited
|
||||||
|
.cruises generic Spring Way, LLC
|
||||||
|
.cu country-code CENIAInternet Industria y San Jose Capitolio Nacional
|
||||||
|
.cuisinella generic SALM S.A.S.
|
||||||
|
.cv country-code Agência Nacional das Comunicações (ANAC)
|
||||||
|
.cw country-code University of Curacao
|
||||||
|
.cx country-code Christmas Island Internet Administration Limited
|
||||||
|
.cy country-code University of Cyprus
|
||||||
|
.cymru generic Nominet UK
|
||||||
|
.cz country-code CZ.NIC, z.s.p.o
|
||||||
|
.dabur generic Dabur India Limited
|
||||||
|
.dad generic Charleston Road Registry Inc.
|
||||||
|
.dance generic United TLD Holdco Ltd.
|
||||||
|
.dating generic Pine Fest, LLC
|
||||||
|
.day generic Charleston Road Registry Inc.
|
||||||
|
.dclk generic Charleston Road Registry Inc.
|
||||||
|
.de country-code DENIC eG
|
||||||
|
.deals generic Sand Sunset, LLC
|
||||||
|
.degree generic United TLD Holdco, Ltd
|
||||||
|
.delivery generic Steel Station, LLC
|
||||||
|
.democrat generic United TLD Holdco Ltd.
|
||||||
|
.dental generic Tin Birch, LLC
|
||||||
|
.dentist generic United TLD Holdco, Ltd
|
||||||
|
.desi generic Desi Networks LLC
|
||||||
|
.design generic Top Level Design, LLC
|
||||||
|
.dev generic Charleston Road Registry Inc.
|
||||||
|
.diamonds generic John Edge, LLC
|
||||||
|
.diet generic Uniregistry, Corp.
|
||||||
|
.digital generic Dash Park, LLC
|
||||||
|
.direct generic Half Trail, LLC
|
||||||
|
.directory generic Extra Madison, LLC
|
||||||
|
.discount generic Holly Hill, LLC
|
||||||
|
.dj country-code Djibouti Telecom S.A
|
||||||
|
.dk country-code Dansk Internet Forum
|
||||||
|
.dm country-code DotDM Corporation
|
||||||
|
.dnp generic Dai Nippon Printing Co., Ltd.
|
||||||
|
.do country-code Pontificia Universidad Catolica Madre y Maestra Recinto Santo Tomas de Aquino
|
||||||
|
.docs generic Charleston Road Registry Inc.
|
||||||
|
.domains generic Sugar Cross, LLC
|
||||||
|
.doosan generic Doosan Corporation
|
||||||
|
.durban generic ZA Central Registry NPC trading as ZA Central Registry
|
||||||
|
.dvag generic Deutsche Vermögensberatung Aktiengesellschaft DVAG
|
||||||
|
.dz country-code CERIST
|
||||||
|
.eat generic Charleston Road Registry Inc.
|
||||||
|
.ec country-code NIC.EC (NICEC) S.A.
|
||||||
|
.edu sponsored EDUCAUSE
|
||||||
|
.education generic Brice Way, LLC
|
||||||
|
.ee country-code Eesti Interneti Sihtasutus (EIS)
|
||||||
|
.eg country-code Egyptian Universities Network (EUN) Supreme Council of Universities
|
||||||
|
.eh country-code Not assigned
|
||||||
|
.email generic Spring Madison, LLC
|
||||||
|
.emerck generic Merck KGaA
|
||||||
|
.energy generic Binky Birch, LLC
|
||||||
|
.engineer generic United TLD Holdco Ltd.
|
||||||
|
.engineering generic Romeo Canyon
|
||||||
|
.enterprises generic Snow Oaks, LLC
|
||||||
|
.equipment generic Corn Station, LLC
|
||||||
|
.er country-code Eritrea Telecommunication Services Corporation (EriTel)
|
||||||
|
.es country-code Red.es
|
||||||
|
.esq generic Charleston Road Registry Inc.
|
||||||
|
.estate generic Trixy Park, LLC
|
||||||
|
.et country-code Ethio telecom
|
||||||
|
.eu country-code EURid vzw/asbl
|
||||||
|
.eurovision generic European Broadcasting Union (EBU)
|
||||||
|
.eus generic Puntueus Fundazioa
|
||||||
|
.events generic Pioneer Maple, LLC
|
||||||
|
.everbank generic EverBank
|
||||||
|
.exchange generic Spring Falls, LLC
|
||||||
|
.expert generic Magic Pass, LLC
|
||||||
|
.exposed generic Victor Beach, LLC
|
||||||
|
.fail generic Atomic Pipe, LLC
|
||||||
|
.fans generic Asiamix Digital Limited
|
||||||
|
.farm generic Just Maple, LLC
|
||||||
|
.fashion generic Top Level Domain Holdings Limited
|
||||||
|
.feedback generic Top Level Spectrum, Inc.
|
||||||
|
.fi country-code Finnish Communications Regulatory Authority
|
||||||
|
.finance generic Cotton Cypress, LLC
|
||||||
|
.financial generic Just Cover, LLC
|
||||||
|
.firmdale generic Firmdale Holdings Limited
|
||||||
|
.fish generic Fox Woods, LLC
|
||||||
|
.fishing generic Top Level Domain Holdings Limited
|
||||||
|
.fit generic Minds + Machines Group Limited
|
||||||
|
.fitness generic Brice Orchard, LLC
|
||||||
|
.fj country-code The University of the South Pacific IT Services
|
||||||
|
.fk country-code Falkland Islands Government
|
||||||
|
.flights generic Fox Station, LLC
|
||||||
|
.florist generic Half Cypress, LLC
|
||||||
|
.flowers generic Uniregistry, Corp.
|
||||||
|
.flsmidth generic FLSmidth A/S
|
||||||
|
.fly generic Charleston Road Registry Inc.
|
||||||
|
.fm country-code FSM Telecommunications Corporation
|
||||||
|
.fo country-code FO Council
|
||||||
|
.foo generic Charleston Road Registry Inc.
|
||||||
|
.forsale generic United TLD Holdco, LLC
|
||||||
|
.foundation generic John Dale, LLC
|
||||||
|
.fr country-code Association Française pour le Nommage Internet en Coopération (A.F.N.I.C.)
|
||||||
|
.frl generic FRLregistry B.V.
|
||||||
|
.frogans generic OP3FT
|
||||||
|
.fund generic John Castle, LLC
|
||||||
|
.furniture generic Lone Fields, LLC
|
||||||
|
.futbol generic United TLD Holdco, Ltd.
|
||||||
|
.ga country-code Agence Nationale des Infrastructures Numériques et des Fréquences (ANINF)
|
||||||
|
.gal generic Asociación puntoGAL
|
||||||
|
.gallery generic Sugar House, LLC
|
||||||
|
.garden generic Top Level Domain Holdings Limited
|
||||||
|
.gb country-code Reserved Domain - IANA
|
||||||
|
.gbiz generic Charleston Road Registry Inc.
|
||||||
|
.gd country-code The National Telecommunications Regulatory Commission (NTRC)
|
||||||
|
.gdn generic Joint Stock Company "Navigation-information systems"
|
||||||
|
.ge country-code Caucasus Online
|
||||||
|
.gent generic COMBELL GROUP NV/SA
|
||||||
|
.gf country-code Net Plus
|
||||||
|
.gg country-code Island Networks Ltd.
|
||||||
|
.ggee generic GMO Internet, Inc.
|
||||||
|
.gh country-code Network Computer Systems Limited
|
||||||
|
.gi country-code Sapphire Networks
|
||||||
|
.gift generic Uniregistry, Corp.
|
||||||
|
.gifts generic Goose Sky, LLC
|
||||||
|
.gives generic United TLD Holdco Ltd.
|
||||||
|
.gl country-code TELE Greenland A/S
|
||||||
|
.glass generic Black Cover, LLC
|
||||||
|
.gle generic Charleston Road Registry Inc.
|
||||||
|
.global generic Dot Global Domain Registry Limited
|
||||||
|
.globo generic Globo Comunicação e Participações S.A
|
||||||
|
.gm country-code GM-NIC
|
||||||
|
.gmail generic Charleston Road Registry Inc.
|
||||||
|
.gmo generic GMO Internet, Inc.
|
||||||
|
.gmx generic 1&1 Mail & Media GmbH
|
||||||
|
.gn country-code Centre National des Sciences Halieutiques de Boussoura
|
||||||
|
.goldpoint generic YODOBASHI CAMERA CO.,LTD.
|
||||||
|
.goog generic Charleston Road Registry Inc.
|
||||||
|
.google generic Charleston Road Registry Inc.
|
||||||
|
.gop generic Republican State Leadership Committee, Inc.
|
||||||
|
.gov sponsored General Services Administration Attn: QTDC, 2E08 (.gov Domain Registration)
|
||||||
|
.gp country-code Networking Technologies Group
|
||||||
|
.gq country-code GETESA
|
||||||
|
.gr country-code ICS-FORTH GR
|
||||||
|
.graphics generic Over Madison, LLC
|
||||||
|
.gratis generic Pioneer Tigers, LLC
|
||||||
|
.green generic Afilias Limited
|
||||||
|
.gripe generic Corn Sunset, LLC
|
||||||
|
.gs country-code Government of South Georgia and South Sandwich Islands (GSGSSI)
|
||||||
|
.gt country-code Universidad del Valle de Guatemala
|
||||||
|
.gu country-code University of Guam Computer Center
|
||||||
|
.guide generic Snow Moon, LLC
|
||||||
|
.guitars generic Uniregistry, Corp.
|
||||||
|
.guru generic Pioneer Cypress, LLC
|
||||||
|
.gw country-code Autoridade Reguladora Nacional - Tecnologias de Informação e Comunicação da Guiné-Bissau
|
||||||
|
.gy country-code University of Guyana
|
||||||
|
.hamburg generic Hamburg Top-Level-Domain GmbH
|
||||||
|
.hangout generic Charleston Road Registry Inc.
|
||||||
|
.haus generic United TLD Holdco, LTD.
|
||||||
|
.healthcare generic Silver Glen, LLC
|
||||||
|
.help generic Uniregistry, Corp.
|
||||||
|
.here generic Charleston Road Registry Inc.
|
||||||
|
.hermes generic Hermes International
|
||||||
|
.hiphop generic Uniregistry, Corp.
|
||||||
|
.hiv generic dotHIV gemeinnuetziger e.V.
|
||||||
|
.hk country-code Hong Kong Internet Registration Corporation Ltd.
|
||||||
|
.hm country-code HM Domain Registry
|
||||||
|
.hn country-code Red de Desarrollo Sostenible Honduras
|
||||||
|
.holdings generic John Madison, LLC
|
||||||
|
.holiday generic Goose Woods, LLC
|
||||||
|
.homes generic DERHomes, LLC
|
||||||
|
.horse generic Top Level Domain Holdings Limited
|
||||||
|
.host generic DotHost Inc.
|
||||||
|
.hosting generic Uniregistry, Corp.
|
||||||
|
.house generic Sugar Park, LLC
|
||||||
|
.how generic Charleston Road Registry Inc.
|
||||||
|
.hr country-code CARNet - Croatian Academic and Research Network
|
||||||
|
.ht country-code Consortium FDS/RDDH
|
||||||
|
.hu country-code Council of Hungarian Internet Providers (CHIP)
|
||||||
|
.ibm generic International Business Machines Corporation
|
||||||
|
.id country-code Perkumpulan Pengelola Nama Domain Internet Indonesia (PANDI)
|
||||||
|
.ie country-code University College Dublin Computing Services Computer Centre
|
||||||
|
.ifm generic ifm electronic gmbh
|
||||||
|
.il country-code Internet Society of Israel
|
||||||
|
.im country-code Isle of Man Government
|
||||||
|
.immo generic Auburn Bloom, LLC
|
||||||
|
.immobilien generic United TLD Holdco Ltd.
|
||||||
|
.in country-code National Internet Exchange of India
|
||||||
|
.industries generic Outer House, LLC
|
||||||
|
.info generic Afilias Limited
|
||||||
|
.ing generic Charleston Road Registry Inc.
|
||||||
|
.ink generic Top Level Design, LLC
|
||||||
|
.institute generic Outer Maple, LLC
|
||||||
|
.insure generic Pioneer Willow, LLC
|
||||||
|
.int sponsored Internet Assigned Numbers Authority
|
||||||
|
.international generic Wild Way, LLC
|
||||||
|
.investments generic Holly Glen, LLC
|
||||||
|
.io country-code IO Top Level Domain Registry Cable and Wireless
|
||||||
|
.iq country-code Communications and Media Commission (CMC)
|
||||||
|
.ir country-code Institute for Research in Fundamental Sciences
|
||||||
|
.irish generic Dot-Irish LLC
|
||||||
|
.is country-code ISNIC - Internet Iceland ltd.
|
||||||
|
.it country-code IIT - CNR
|
||||||
|
.iwc generic Richemont DNS Inc.
|
||||||
|
.jcb generic JCB Co., Ltd.
|
||||||
|
.je country-code Island Networks (Jersey) Ltd.
|
||||||
|
.jetzt generic New TLD Company AB
|
||||||
|
.jm country-code University of West Indies
|
||||||
|
.jo country-code National Information Technology Center (NITC)
|
||||||
|
.jobs sponsored Employ Media LLC
|
||||||
|
.joburg generic ZA Central Registry NPC trading as ZA Central Registry
|
||||||
|
.jp country-code Japan Registry Services Co., Ltd.
|
||||||
|
.juegos generic Uniregistry, Corp.
|
||||||
|
.kaufen generic United TLD Holdco Ltd.
|
||||||
|
.kddi generic KDDI CORPORATION
|
||||||
|
.ke country-code Kenya Network Information Center (KeNIC)
|
||||||
|
.kg country-code AsiaInfo Telecommunication Enterprise
|
||||||
|
.kh country-code Ministry of Post and Telecommunications
|
||||||
|
.ki country-code Ministry of Communications, Transport, and Tourism Development
|
||||||
|
.kim generic Afilias Limited
|
||||||
|
.kitchen generic Just Goodbye, LLC
|
||||||
|
.kiwi generic DOT KIWI LIMITED
|
||||||
|
.km country-code Comores Telecom
|
||||||
|
.kn country-code Ministry of Finance, Sustainable Development Information & Technology
|
||||||
|
.koeln generic NetCologne Gesellschaft für Telekommunikation mbH
|
||||||
|
.kp country-code Star Joint Venture Company
|
||||||
|
.kr country-code Korea Internet & Security Agency (KISA)
|
||||||
|
.krd generic KRG Department of Information Technology
|
||||||
|
.kred generic KredTLD Pty Ltd
|
||||||
|
.kw country-code Ministry of Communications
|
||||||
|
.ky country-code The Information and Communications Technology Authority
|
||||||
|
.kyoto generic Academic Institution: Kyoto Jyoho Gakuen
|
||||||
|
.kz country-code Association of IT Companies of Kazakhstan
|
||||||
|
.la country-code Lao National Internet Committee (LANIC), Ministry of Posts and Telecommunications
|
||||||
|
.lacaixa generic CAIXA D'ESTALVIS I PENSIONS DE BARCELONA
|
||||||
|
.land generic Pine Moon, LLC
|
||||||
|
.lat generic ECOM-LAC Federación de Latinoamérica y el Caribe para Internet y el Comercio Electrónico
|
||||||
|
.latrobe generic La Trobe University
|
||||||
|
.lawyer generic United TLD Holdco, Ltd
|
||||||
|
.lb country-code American University of Beirut Computing and Networking Services
|
||||||
|
.lc country-code University of Puerto Rico
|
||||||
|
.lds generic IRI Domain Management, LLC
|
||||||
|
.lease generic Victor Trail, LLC
|
||||||
|
.legal generic Blue Falls, LLC
|
||||||
|
.lgbt generic Afilias Limited
|
||||||
|
.li country-code Universitaet Liechtenstein
|
||||||
|
.lidl generic Schwarz Domains und Services GmbH & Co. KG
|
||||||
|
.life generic Trixy Oaks, LLC
|
||||||
|
.lighting generic John McCook, LLC
|
||||||
|
.limited generic Big Fest, LLC
|
||||||
|
.limo generic Hidden Frostbite, LLC
|
||||||
|
.link generic Uniregistry, Corp.
|
||||||
|
.lk country-code Council for Information Technology LK Domain Registrar
|
||||||
|
.loans generic June Woods, LLC
|
||||||
|
.london generic Dot London Domains Limited
|
||||||
|
.lotte generic Lotte Holdings Co., Ltd.
|
||||||
|
.lotto generic Afilias Limited
|
||||||
|
.lr country-code Data Technology Solutions, Inc.
|
||||||
|
.ls country-code National University of Lesotho
|
||||||
|
.lt country-code Kaunas University of Technology
|
||||||
|
.ltda generic InterNetX Corp.
|
||||||
|
.lu country-code RESTENA
|
||||||
|
.luxe generic Top Level Domain Holdings Limited
|
||||||
|
.luxury generic Luxury Partners LLC
|
||||||
|
.lv country-code University of Latvia Institute of Mathematics and Computer Science Department of Network Solutions (DNS)
|
||||||
|
.ly country-code General Post and Telecommunication Company
|
||||||
|
.ma country-code Agence Nationale de Réglementation des Télécommunications (ANRT)
|
||||||
|
.madrid generic Comunidad de Madrid
|
||||||
|
.maison generic Victor Frostbite, LLC
|
||||||
|
.management generic John Goodbye, LLC
|
||||||
|
.mango generic PUNTO FA S.L.
|
||||||
|
.market generic Unitied TLD Holdco, Ltd
|
||||||
|
.marketing generic Fern Pass, LLC
|
||||||
|
.marriott generic Marriott Worldwide Corporation
|
||||||
|
.mc country-code Gouvernement de Monaco Direction des Communications Electroniques
|
||||||
|
.md country-code MoldData S.E.
|
||||||
|
.me country-code Government of Montenegro
|
||||||
|
.media generic Grand Glen, LLC
|
||||||
|
.meet generic Afilias Limited
|
||||||
|
.melbourne generic The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation
|
||||||
|
.meme generic Charleston Road Registry Inc.
|
||||||
|
.memorial generic Dog Beach, LLC
|
||||||
|
.menu generic Wedding TLD2, LLC
|
||||||
|
.mf country-code Not assigned
|
||||||
|
.mg country-code NIC-MG (Network Information Center Madagascar)
|
||||||
|
.mh country-code Office of the Cabinet
|
||||||
|
.miami generic Top Level Domain Holdings Limited
|
||||||
|
.mil sponsored DoD Network Information Center
|
||||||
|
.mini generic Bayerische Motoren Werke Aktiengesellschaft
|
||||||
|
.mk country-code Macedonian Academic Research Network Skopje
|
||||||
|
.ml country-code Agence des Technologies de l’Information et de la Communication
|
||||||
|
.mm country-code Ministry of Communications, Posts & Telegraphs
|
||||||
|
.mn country-code Datacom Co., Ltd.
|
||||||
|
.mo country-code Bureau of Telecommunications Regulation (DSRT)
|
||||||
|
.mobi sponsored Afilias Technologies Limited dba dotMobi
|
||||||
|
.moda generic United TLD Holdco Ltd.
|
||||||
|
.moe generic Interlink Co., Ltd.
|
||||||
|
.monash generic Monash University
|
||||||
|
.money generic Outer McCook, LLC
|
||||||
|
.mormon generic IRI Domain Management, LLC ("Applicant")
|
||||||
|
.mortgage generic United TLD Holdco, Ltd
|
||||||
|
.moscow generic Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
|
||||||
|
.motorcycles generic DERMotorcycles, LLC
|
||||||
|
.mov generic Charleston Road Registry Inc.
|
||||||
|
.mp country-code Saipan Datacom, Inc.
|
||||||
|
.mq country-code MEDIASERV
|
||||||
|
.mr country-code Université des Sciences, de Technologie et de Médecine
|
||||||
|
.ms country-code MNI Networks Ltd.
|
||||||
|
.mt country-code NIC (Malta)
|
||||||
|
.mu country-code Internet Direct Ltd
|
||||||
|
.museum sponsored Museum Domain Management Association
|
||||||
|
.mv country-code Dhiraagu Pvt. Ltd. (DHIVEHINET)
|
||||||
|
.mw country-code Malawi Sustainable Development Network Programme (Malawi SDNP)
|
||||||
|
.mx country-code NIC-Mexico ITESM - Campus Monterrey
|
||||||
|
.my country-code MYNIC Berhad
|
||||||
|
.mz country-code Centro de Informatica de Universidade Eduardo Mondlane
|
||||||
|
.na country-code Namibian Network Information Center
|
||||||
|
.nagoya generic GMO Registry, Inc.
|
||||||
|
.name generic-restricted VeriSign Information Services, Inc.
|
||||||
|
.navy generic United TLD Holdco Ltd.
|
||||||
|
.nc country-code Office des Postes et Telecommunications
|
||||||
|
.ne country-code SONITEL
|
||||||
|
.net generic VeriSign Global Registry Services
|
||||||
|
.network generic Trixy Manor, LLC
|
||||||
|
.neustar generic NeuStar, Inc.
|
||||||
|
.new generic Charleston Road Registry Inc.
|
||||||
|
.nexus generic Charleston Road Registry Inc.
|
||||||
|
.nf country-code Norfolk Island Data Services
|
||||||
|
.ng country-code Nigeria Internet Registration Association
|
||||||
|
.ngo generic Public Interest Registry
|
||||||
|
.nhk generic Japan Broadcasting Corporation (NHK)
|
||||||
|
.ni country-code Universidad Nacional del Ingernieria Centro de Computo
|
||||||
|
.nico generic DWANGO Co., Ltd.
|
||||||
|
.ninja generic United TLD Holdco Ltd.
|
||||||
|
.nl country-code SIDN (Stichting Internet Domeinregistratie Nederland)
|
||||||
|
.no country-code UNINETT Norid A/S
|
||||||
|
.np country-code Mercantile Communications Pvt. Ltd.
|
||||||
|
.nr country-code CENPAC NET
|
||||||
|
.nra generic NRA Holdings Company, INC.
|
||||||
|
.nrw generic Minds + Machines GmbH
|
||||||
|
.ntt generic NIPPON TELEGRAPH AND TELEPHONE CORPORATION
|
||||||
|
.nu country-code The IUSN Foundation
|
||||||
|
.nyc generic The City of New York by and through the New York City Department of Information Technology & Telecommunications
|
||||||
|
.nz country-code InternetNZ
|
||||||
|
.okinawa generic BusinessRalliart inc.
|
||||||
|
.om country-code Telecommunications Regulatory Authority (TRA)
|
||||||
|
.one generic One.com A/S
|
||||||
|
.ong generic Public Interest Registry
|
||||||
|
.onl generic I-REGISTRY Ltd., Niederlassung Deutschland
|
||||||
|
.ooo generic INFIBEAM INCORPORATION LIMITED
|
||||||
|
.org generic Public Interest Registry (PIR)
|
||||||
|
.organic generic Afilias Limited
|
||||||
|
.osaka generic Interlink Co., Ltd.
|
||||||
|
.otsuka generic Otsuka Holdings Co., Ltd.
|
||||||
|
.ovh generic OVH SAS
|
||||||
|
.pa country-code Universidad Tecnologica de Panama
|
||||||
|
.paris generic City of Paris
|
||||||
|
.partners generic Magic Glen, LLC
|
||||||
|
.parts generic Sea Goodbye, LLC
|
||||||
|
.party generic Blue Sky Registry Limited
|
||||||
|
.pe country-code Red Cientifica Peruana
|
||||||
|
.pf country-code Gouvernement de la Polynésie française
|
||||||
|
.pg country-code PNG DNS Administration Vice Chancellors Office The Papua New Guinea University of Technology
|
||||||
|
.ph country-code PH Domain Foundation
|
||||||
|
.pharmacy generic National Association of Boards of Pharmacy
|
||||||
|
.photo generic Uniregistry, Corp.
|
||||||
|
.photography generic Sugar Glen, LLC
|
||||||
|
.photos generic Sea Corner, LLC
|
||||||
|
.physio generic PhysBiz Pty Ltd
|
||||||
|
.pics generic Uniregistry, Corp.
|
||||||
|
.pictures generic Foggy Sky, LLC
|
||||||
|
.pink generic Afilias Limited
|
||||||
|
.pizza generic Foggy Moon, LLC
|
||||||
|
.pk country-code PKNIC
|
||||||
|
.pl country-code Research and Academic Computer Network
|
||||||
|
.place generic Snow Galley, LLC
|
||||||
|
.plumbing generic Spring Tigers, LLC
|
||||||
|
.pm country-code Association Française pour le Nommage Internet en Coopération (A.F.N.I.C.)
|
||||||
|
.pn country-code Pitcairn Island Administration
|
||||||
|
.pohl generic Deutsche Vermögensberatung Aktiengesellschaft DVAG
|
||||||
|
.poker generic Afilias Domains No. 5 Limited
|
||||||
|
.porn generic ICM Registry PN LLC
|
||||||
|
.post sponsored Universal Postal Union
|
||||||
|
.pr country-code Gauss Research Laboratory Inc.
|
||||||
|
.praxi generic Praxi S.p.A.
|
||||||
|
.press generic DotPress Inc.
|
||||||
|
.pro generic-restricted Registry Services Corporation dba RegistryPro
|
||||||
|
.prod generic Charleston Road Registry Inc.
|
||||||
|
.productions generic Magic Birch, LLC
|
||||||
|
.prof generic Charleston Road Registry Inc.
|
||||||
|
.properties generic Big Pass, LLC
|
||||||
|
.property generic Uniregistry, Corp.
|
||||||
|
.ps country-code Ministry Of Telecommunications & Information Technology, Government Computer Center.
|
||||||
|
.pt country-code Associação DNS.PT
|
||||||
|
.pub generic United TLD Holdco Ltd.
|
||||||
|
.pw country-code Micronesia Investment and Development Corporation
|
||||||
|
.py country-code NIC-PY
|
||||||
|
.qa country-code Communications Regulatory Authority
|
||||||
|
.qpon generic dotCOOL, Inc.
|
||||||
|
.quebec generic PointQuébec Inc
|
||||||
|
.re country-code Association Française pour le Nommage Internet en Coopération (A.F.N.I.C.)
|
||||||
|
.realtor generic Real Estate Domains LLC
|
||||||
|
.recipes generic Grand Island, LLC
|
||||||
|
.red generic Afilias Limited
|
||||||
|
.rehab generic United TLD Holdco Ltd.
|
||||||
|
.reise generic dotreise GmbH
|
||||||
|
.reisen generic New Cypress, LLC
|
||||||
|
.reit generic National Association of Real Estate Investment Trusts, Inc.
|
||||||
|
.ren generic Beijing Qianxiang Wangjing Technology Development Co., Ltd.
|
||||||
|
.rentals generic Big Hollow,LLC
|
||||||
|
.repair generic Lone Sunset, LLC
|
||||||
|
.report generic Binky Glen, LLC
|
||||||
|
.republican generic United TLD Holdco Ltd.
|
||||||
|
.rest generic Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
|
||||||
|
.restaurant generic Snow Avenue, LLC
|
||||||
|
.reviews generic United TLD Holdco, Ltd.
|
||||||
|
.rich generic I-REGISTRY Ltd., Niederlassung Deutschland
|
||||||
|
.rio generic Empresa Municipal de Informática SA - IPLANRIO
|
||||||
|
.rip generic United TLD Holdco Ltd.
|
||||||
|
.ro country-code National Institute for R&D in Informatics
|
||||||
|
.rocks generic United TLD Holdco, LTD.
|
||||||
|
.rodeo generic Top Level Domain Holdings Limited
|
||||||
|
.rs country-code Serbian National Internet Domain Registry (RNIDS)
|
||||||
|
.rsvp generic Charleston Road Registry Inc.
|
||||||
|
.ru country-code Coordination Center for TLD RU
|
||||||
|
.ruhr generic regiodot GmbH & Co. KG
|
||||||
|
.rw country-code Rwanda Information Communication and Technology Association (RICTA)
|
||||||
|
.ryukyu generic BusinessRalliart inc.
|
||||||
|
.sa country-code Communications and Information Technology Commission
|
||||||
|
.saarland generic dotSaarland GmbH
|
||||||
|
.sale generic United TLD Holdco, Ltd
|
||||||
|
.samsung generic SAMSUNG SDS CO., LTD
|
||||||
|
.sarl generic Delta Orchard, LLC
|
||||||
|
.saxo generic Saxo Bank A/S
|
||||||
|
.sb country-code Solomon Telekom Company Limited
|
||||||
|
.sc country-code VCS Pty Ltd
|
||||||
|
.sca generic SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ)
|
||||||
|
.scb generic The Siam Commercial Bank Public Company Limited ("SCB")
|
||||||
|
.schmidt generic SALM S.A.S.
|
||||||
|
.schule generic Outer Moon, LLC
|
||||||
|
.schwarz generic Schwarz Domains und Services GmbH & Co. KG
|
||||||
|
.science generic dot Science Limited
|
||||||
|
.scot generic Dot Scot Registry Limited
|
||||||
|
.sd country-code Sudan Internet Society
|
||||||
|
.se country-code The Internet Infrastructure Foundation
|
||||||
|
.services generic Fox Castle, LLC
|
||||||
|
.sew generic SEW-EURODRIVE GmbH & Co KG
|
||||||
|
.sexy generic Uniregistry, Corp.
|
||||||
|
.sg country-code Singapore Network Information Centre (SGNIC) Pte Ltd
|
||||||
|
.sh country-code Government of St. Helena
|
||||||
|
.shiksha generic Afilias Limited
|
||||||
|
.shoes generic Binky Galley, LLC
|
||||||
|
.shriram generic Shriram Capital Ltd.
|
||||||
|
.si country-code Academic and Research Network of Slovenia (ARNES)
|
||||||
|
.singles generic Fern Madison, LLC
|
||||||
|
.sj country-code UNINETT Norid A/S
|
||||||
|
.sk country-code SK-NIC, a.s.
|
||||||
|
.sky generic Sky IP International Ltd, a company incorporated in England and Wales, operating via its registered Swiss branch
|
||||||
|
.sl country-code Sierratel
|
||||||
|
.sm country-code Telecom Italia San Marino S.p.A.
|
||||||
|
.sn country-code Universite Cheikh Anta Diop NIC Senegal
|
||||||
|
.so country-code Ministry of Post and Telecommunications
|
||||||
|
.social generic United TLD Holdco Ltd.
|
||||||
|
.software generic United TLD Holdco, Ltd
|
||||||
|
.sohu generic Sohu.com Limited
|
||||||
|
.solar generic Ruby Town, LLC
|
||||||
|
.solutions generic Silver Cover, LLC
|
||||||
|
.soy generic Charleston Road Registry Inc.
|
||||||
|
.space generic DotSpace Inc.
|
||||||
|
.spiegel generic SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG
|
||||||
|
.sr country-code Telesur
|
||||||
|
.ss country-code Not assigned
|
||||||
|
.st country-code Tecnisys
|
||||||
|
.style generic Binky Moon, LLC
|
||||||
|
.su country-code Russian Institute for Development of Public Networks (ROSNIIROS)
|
||||||
|
.supplies generic Atomic Fields, LLC
|
||||||
|
.supply generic Half Falls, LLC
|
||||||
|
.support generic Grand Orchard, LLC
|
||||||
|
.surf generic Top Level Domain Holdings Limited
|
||||||
|
.surgery generic Tin Avenue, LLC
|
||||||
|
.suzuki generic SUZUKI MOTOR CORPORATION
|
||||||
|
.sv country-code SVNet
|
||||||
|
.sx country-code SX Registry SA B.V.
|
||||||
|
.sy country-code National Agency for Network Services (NANS)
|
||||||
|
.sydney generic State of New South Wales, Department of Premier and Cabinet
|
||||||
|
.systems generic Dash Cypress, LLC
|
||||||
|
.sz country-code University of Swaziland Department of Computer Science
|
||||||
|
.taipei generic Taipei City Government
|
||||||
|
.tatar generic Limited Liability Company "Coordination Center of Regional Domain of Tatarstan Republic"
|
||||||
|
.tattoo generic Uniregistry, Corp.
|
||||||
|
.tax generic Storm Orchard, LLC
|
||||||
|
.tc country-code Melrex TC
|
||||||
|
.td country-code Société des télécommunications du Tchad (SOTEL TCHAD)
|
||||||
|
.technology generic Auburn Falls, LLC
|
||||||
|
.tel sponsored Telnic Ltd.
|
||||||
|
.temasek generic Temasek Holdings (Private) Limited
|
||||||
|
.tennis generic Cotton Bloom, LLC
|
||||||
|
.tf country-code Association Française pour le Nommage Internet en Coopération (A.F.N.I.C.)
|
||||||
|
.tg country-code Cafe Informatique et Telecommunications
|
||||||
|
.th country-code Thai Network Information Center Foundation
|
||||||
|
.tienda generic Victor Manor, LLC
|
||||||
|
.tips generic Corn Willow, LLC
|
||||||
|
.tires generic Dog Edge, LLC
|
||||||
|
.tirol generic punkt Tirol GmbH
|
||||||
|
.tj country-code Information Technology Center
|
||||||
|
.tk country-code Telecommunication Tokelau Corporation (Teletok)
|
||||||
|
.tl country-code Ministry of Transport and Communications; National Division of Information and Technology
|
||||||
|
.tm country-code TM Domain Registry Ltd
|
||||||
|
.tn country-code Agence Tunisienne d'Internet
|
||||||
|
.to country-code Government of the Kingdom of Tonga H.R.H. Crown Prince Tupouto'a c/o Consulate of Tonga
|
||||||
|
.today generic Pearl Woods, LLC
|
||||||
|
.tokyo generic GMO Registry, Inc.
|
||||||
|
.tools generic Pioneer North, LLC
|
||||||
|
.top generic Jiangsu Bangning Science & Technology Co.,Ltd.
|
||||||
|
.toshiba generic TOSHIBA Corporation
|
||||||
|
.town generic Koko Moon, LLC
|
||||||
|
.toys generic Pioneer Orchard, LLC
|
||||||
|
.tp country-code -
|
||||||
|
.tr country-code Middle East Technical University Department of Computer Engineering
|
||||||
|
.trade generic Elite Registry Limited
|
||||||
|
.training generic Wild Willow, LLC
|
||||||
|
.travel sponsored Tralliance Registry Management Company, LLC.
|
||||||
|
.trust generic Artemis Internet Inc
|
||||||
|
.tt country-code University of the West Indies Faculty of Engineering
|
||||||
|
.tui generic TUI AG
|
||||||
|
.tv country-code Ministry of Finance and Tourism
|
||||||
|
.tw country-code Taiwan Network Information Center (TWNIC)
|
||||||
|
.tz country-code Tanzania Network Information Centre (tzNIC)
|
||||||
|
.ua country-code Hostmaster Ltd.
|
||||||
|
.ug country-code Uganda Online Ltd.
|
||||||
|
.uk country-code Nominet UK
|
||||||
|
.um country-code Not assigned
|
||||||
|
.university generic Little Station, LLC
|
||||||
|
.uno generic Dot Latin LLC
|
||||||
|
.uol generic UBN INTERNET LTDA.
|
||||||
|
.us country-code NeuStar, Inc.
|
||||||
|
.uy country-code SeCIU - Universidad de la Republica
|
||||||
|
.uz country-code Computerization and Information Technologies Developing Center UZINFOCOM
|
||||||
|
.va country-code Holy See Secretariat of State Department of Telecommunications
|
||||||
|
.vacations generic Atomic Tigers, LLC
|
||||||
|
.vc country-code Ministry of Telecommunications, Science, Technology and Industry
|
||||||
|
.ve country-code Comisión Nacional de Telecomunicaciones (CONATEL)
|
||||||
|
.vegas generic Dot Vegas, Inc.
|
||||||
|
.ventures generic Binky Lake, LLC
|
||||||
|
.versicherung generic dotversicherung-registry GmbH
|
||||||
|
.vet generic United TLD Holdco, Ltd
|
||||||
|
.vg country-code Telecommunications Regulatory Commission of the Virgin Islands
|
||||||
|
.vi country-code Virgin Islands Public Telcommunications System c/o COBEX Internet Services
|
||||||
|
.viajes generic Black Madison, LLC
|
||||||
|
.video generic United TLD Holdco, Ltd
|
||||||
|
.villas generic New Sky, LLC
|
||||||
|
.vision generic Koko Station, LLC
|
||||||
|
.vlaanderen generic DNS.be vzw
|
||||||
|
.vn country-code Ministry of Information and Communications of Socialist Republic of Viet Nam
|
||||||
|
.vodka generic Top Level Domain Holdings Limited
|
||||||
|
.vote generic Monolith Registry LLC
|
||||||
|
.voting generic Valuetainment Corp.
|
||||||
|
.voto generic Monolith Registry LLC
|
||||||
|
.voyage generic Ruby House, LLC
|
||||||
|
.vu country-code Telecom Vanuatu Limited
|
||||||
|
.wales generic Nominet UK
|
||||||
|
.wang generic Zodiac Registry Limited
|
||||||
|
.watch generic Sand Shadow, LLC
|
||||||
|
.webcam generic dot Webcam Limited
|
||||||
|
.website generic DotWebsite Inc.
|
||||||
|
.wed generic Atgron, Inc.
|
||||||
|
.wedding generic Top Level Domain Holdings Limited
|
||||||
|
.wf country-code Association Française pour le Nommage Internet en Coopération (A.F.N.I.C.)
|
||||||
|
.whoswho generic Who's Who Registry
|
||||||
|
.wien generic punkt.wien GmbH
|
||||||
|
.wiki generic Top Level Design, LLC
|
||||||
|
.williamhill generic William Hill Organization Limited
|
||||||
|
.wme generic William Morris Endeavor Entertainment, LLC
|
||||||
|
.work generic Top Level Domain Holdings Limited
|
||||||
|
.works generic Little Dynamite, LLC
|
||||||
|
.world generic Bitter Fields, LLC
|
||||||
|
.ws country-code Government of Samoa Ministry of Foreign Affairs & Trade
|
||||||
|
.wtc generic World Trade Centers Association, Inc.
|
||||||
|
.wtf generic Hidden Way, LLC
|
||||||
|
.测试 test Internet Assigned Numbers Authority
|
||||||
|
.परीक्षा test Internet Assigned Numbers Authority
|
||||||
|
.佛山 generic Guangzhou YU Wei Information Technology Co., Ltd.
|
||||||
|
.集团 generic Eagle Horizon Limited
|
||||||
|
.在线 generic TLD REGISTRY LIMITED
|
||||||
|
.한국 country-code KISA (Korea Internet & Security Agency)
|
||||||
|
.ভারত country-code National Internet Exchange of India
|
||||||
|
.八卦 generic Zodiac Scorpio Limited
|
||||||
|
.موقع generic Suhub Electronic Establishment
|
||||||
|
.বাংলা country-code Not assigned
|
||||||
|
.公益 generic China Organizational Name Administration Center
|
||||||
|
.公司 generic Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center)
|
||||||
|
.移动 generic Afilias Limited
|
||||||
|
.我爱你 generic Tycoon Treasure Limited
|
||||||
|
.москва generic Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
|
||||||
|
.испытание test Internet Assigned Numbers Authority
|
||||||
|
.қаз country-code Association of IT Companies of Kazakhstan
|
||||||
|
.онлайн generic CORE Association
|
||||||
|
.сайт generic CORE Association
|
||||||
|
.срб country-code Serbian National Internet Domain Registry (RNIDS)
|
||||||
|
.бел country-code Reliable Software Inc.
|
||||||
|
.테스트 test Internet Assigned Numbers Authority
|
||||||
|
.淡马锡 generic Temasek Holdings (Private) Limited
|
||||||
|
.орг generic Public Interest Registry
|
||||||
|
.삼성 generic SAMSUNG SDS CO., LTD
|
||||||
|
.சிங்கப்பூர் country-code Singapore Network Information Centre (SGNIC) Pte Ltd
|
||||||
|
.商标 generic HU YI GLOBAL INFORMATION RESOURCES(HOLDING) COMPANY.HONGKONG LIMITED
|
||||||
|
.商店 generic Wild Island, LLC
|
||||||
|
.商城 generic Zodiac Aquarius Limited
|
||||||
|
.дети generic The Foundation for Network Initiatives “The Smart Internet”
|
||||||
|
.мкд country-code Macedonian Academic Research Network Skopje
|
||||||
|
.טעסט test Internet Assigned Numbers Authority
|
||||||
|
.中文网 generic TLD REGISTRY LIMITED
|
||||||
|
.中信 generic CITIC Group Corporation
|
||||||
|
.中国 country-code China Internet Network Information Center
|
||||||
|
.中國 country-code China Internet Network Information Center
|
||||||
|
.谷歌 generic Charleston Road Registry Inc.
|
||||||
|
.భారత్ country-code National Internet Exchange of India
|
||||||
|
.ලංකා country-code LK Domain Registry
|
||||||
|
.測試 test Internet Assigned Numbers Authority
|
||||||
|
.ભારત country-code National Internet Exchange of India
|
||||||
|
.भारत country-code National Internet Exchange of India
|
||||||
|
.آزمایشی test Internet Assigned Numbers Authority
|
||||||
|
.பரிட்சை test Internet Assigned Numbers Authority
|
||||||
|
.网店 generic Zodiac Libra Limited
|
||||||
|
.संगठन generic Public Interest Registry
|
||||||
|
.网络 generic Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center)
|
||||||
|
.укр country-code Ukrainian Network Information Centre (UANIC), Inc.
|
||||||
|
.香港 country-code Hong Kong Internet Registration Corporation Ltd.
|
||||||
|
.δοκιμή test Internet Assigned Numbers Authority
|
||||||
|
.إختبار test Internet Assigned Numbers Authority
|
||||||
|
.台湾 country-code Taiwan Network Information Center (TWNIC)
|
||||||
|
.台灣 country-code Taiwan Network Information Center (TWNIC)
|
||||||
|
.手机 generic Beijing RITT-Net Technology Development Co., Ltd
|
||||||
|
.мон country-code Datacom Co.,Ltd
|
||||||
|
.الجزائر country-code CERIST
|
||||||
|
.عمان country-code Telecommunications Regulatory Authority (TRA)
|
||||||
|
.ایران country-code Institute for Research in Fundamental Sciences (IPM)
|
||||||
|
.امارات country-code Telecommunications Regulatory Authority (TRA)
|
||||||
|
.بازار generic CORE Association
|
||||||
|
.پاکستان country-code Not assigned
|
||||||
|
.الاردن country-code National Information Technology Center (NITC)
|
||||||
|
.بھارت country-code National Internet Exchange of India
|
||||||
|
.المغرب country-code Agence Nationale de Réglementation des Télécommunications (ANRT)
|
||||||
|
.السعودية country-code Communications and Information Technology Commission
|
||||||
|
.سودان country-code Not assigned
|
||||||
|
.عراق country-code Not assigned
|
||||||
|
.مليسيا country-code MYNIC Berhad
|
||||||
|
.شبكة generic International Domain Registry Pty. Ltd.
|
||||||
|
.გე country-code Information Technologies Development Center (ITDC)
|
||||||
|
.机构 generic Public Interest Registry
|
||||||
|
.组织机构 generic Public Interest Registry
|
||||||
|
.ไทย country-code Thai Network Information Center Foundation
|
||||||
|
.سورية country-code National Agency for Network Services (NANS)
|
||||||
|
.рус generic Rusnames Limited
|
||||||
|
.рф country-code Coordination Center for TLD RU
|
||||||
|
.تونس country-code Agence Tunisienne d'Internet
|
||||||
|
.みんな generic Charleston Road Registry Inc.
|
||||||
|
.グーグル generic Charleston Road Registry Inc.
|
||||||
|
.世界 generic Stable Tone Limited
|
||||||
|
.ਭਾਰਤ country-code National Internet Exchange of India
|
||||||
|
.网址 generic KNET Co., Ltd
|
||||||
|
.游戏 generic Spring Fields, LLC
|
||||||
|
.vermögensberater generic Deutsche Vermögensberatung Aktiengesellschaft DVAG
|
||||||
|
.vermögensberatung generic Deutsche Vermögensberatung Aktiengesellschaft DVAG
|
||||||
|
.企业 generic Dash McCook, LLC
|
||||||
|
.مصر country-code National Telecommunication Regulatory Authority - NTRA
|
||||||
|
.قطر country-code Communications Regulatory Authority
|
||||||
|
.广东 generic Guangzhou YU Wei Information Technology Co., Ltd.
|
||||||
|
.இலங்கை country-code LK Domain Registry
|
||||||
|
.இந்தியா country-code National Internet Exchange of India
|
||||||
|
.հայ country-code Not assigned
|
||||||
|
.新加坡 country-code Singapore Network Information Centre (SGNIC) Pte Ltd
|
||||||
|
.فلسطين country-code Ministry of Telecom & Information Technology (MTIT)
|
||||||
|
.テスト test Internet Assigned Numbers Authority
|
||||||
|
.政务 generic China Organizational Name Administration Center
|
||||||
|
.xxx sponsored ICM Registry LLC
|
||||||
|
.xyz generic XYZ.COM LLC
|
||||||
|
.yachts generic DERYachts, LLC
|
||||||
|
.yandex generic YANDEX, LLC
|
||||||
|
.ye country-code TeleYemen
|
||||||
|
.yodobashi generic YODOBASHI CAMERA CO.,LTD.
|
||||||
|
.yoga generic Top Level Domain Holdings Limited
|
||||||
|
.yokohama generic GMO Registry, Inc.
|
||||||
|
.youtube generic Charleston Road Registry Inc.
|
||||||
|
.yt country-code Association Française pour le Nommage Internet en Coopération (A.F.N.I.C.)
|
||||||
|
.za country-code ZA Domain Name Authority
|
||||||
|
.zip generic Charleston Road Registry Inc.
|
||||||
|
.zm country-code Zambia Information and Communications Technology Authority (ZICTA)
|
||||||
|
.zone generic Outer Falls, LLC
|
||||||
|
.zuerich generic Kanton Zürich (Canton of Zurich)
|
||||||
|
.zw country-code Postal and Telecommunications Regulatory Authority of Zimbabwe (POTRAZ)
|
||||||
107
control/coroaverager3.py
Normal file
107
control/coroaverager3.py
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
"""
|
||||||
|
A coroutine to compute a running average.
|
||||||
|
|
||||||
|
Testing ``averager`` by itself::
|
||||||
|
|
||||||
|
>>> coro_avg = averager()
|
||||||
|
>>> next(coro_avg)
|
||||||
|
>>> coro_avg.send(10)
|
||||||
|
>>> coro_avg.send(30)
|
||||||
|
>>> coro_avg.send(6.5)
|
||||||
|
>>> coro_avg.send(None)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
StopIteration: Result(count=3, average=15.5)
|
||||||
|
|
||||||
|
|
||||||
|
Driving it with ``yield from``::
|
||||||
|
|
||||||
|
>>> def summarize(results):
|
||||||
|
... while True:
|
||||||
|
... result = yield from averager()
|
||||||
|
... results.append(result)
|
||||||
|
...
|
||||||
|
>>> results = []
|
||||||
|
>>> summary = summarize(results)
|
||||||
|
>>> next(summary)
|
||||||
|
>>> for height in data['girls;m']:
|
||||||
|
... summary.send(height)
|
||||||
|
...
|
||||||
|
>>> summary.send(None)
|
||||||
|
>>> for height in data['boys;m']:
|
||||||
|
... summary.send(height)
|
||||||
|
...
|
||||||
|
>>> summary.send(None)
|
||||||
|
>>> results == [
|
||||||
|
... Result(count=10, average=1.4279999999999997),
|
||||||
|
... Result(count=9, average=1.3888888888888888)
|
||||||
|
... ]
|
||||||
|
True
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# BEGIN YIELD_FROM_AVERAGER
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
|
Result = namedtuple('Result', 'count average')
|
||||||
|
|
||||||
|
|
||||||
|
# the subgenerator
|
||||||
|
def averager(): # <1>
|
||||||
|
total = 0.0
|
||||||
|
count = 0
|
||||||
|
average = None
|
||||||
|
while True:
|
||||||
|
term = yield # <2>
|
||||||
|
if term is None: # <3>
|
||||||
|
break
|
||||||
|
total += term
|
||||||
|
count += 1
|
||||||
|
average = total/count
|
||||||
|
return Result(count, average) # <4>
|
||||||
|
|
||||||
|
|
||||||
|
# the delegating generator
|
||||||
|
def grouper(results, key): # <5>
|
||||||
|
while True: # <6>
|
||||||
|
results[key] = yield from averager() # <7>
|
||||||
|
|
||||||
|
|
||||||
|
# the client code, a.k.a. the caller
|
||||||
|
def main(data): # <8>
|
||||||
|
results = {}
|
||||||
|
for key, values in data.items():
|
||||||
|
group = grouper(results, key) # <9>
|
||||||
|
next(group) # <10>
|
||||||
|
for value in values:
|
||||||
|
group.send(value) # <11>
|
||||||
|
group.send(None) # <12>
|
||||||
|
|
||||||
|
# print(results) # uncomment to debug
|
||||||
|
report(results)
|
||||||
|
|
||||||
|
|
||||||
|
# output report
|
||||||
|
def report(results):
|
||||||
|
for key, result in sorted(results.items()):
|
||||||
|
group, unit = key.split(';')
|
||||||
|
print('{:2} {:5} averaging {:.2f}{}'.format(
|
||||||
|
result.count, group, result.average, unit))
|
||||||
|
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'girls;kg':
|
||||||
|
[40.9, 38.5, 44.3, 42.2, 45.2, 41.7, 44.5, 38.0, 40.6, 44.5],
|
||||||
|
'girls;m':
|
||||||
|
[1.6, 1.51, 1.4, 1.3, 1.41, 1.39, 1.33, 1.46, 1.45, 1.43],
|
||||||
|
'boys;kg':
|
||||||
|
[39.0, 40.8, 43.2, 40.8, 43.1, 38.6, 41.4, 40.6, 36.3],
|
||||||
|
'boys;m':
|
||||||
|
[1.38, 1.5, 1.32, 1.25, 1.37, 1.48, 1.25, 1.49, 1.46],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(data)
|
||||||
|
|
||||||
|
# END YIELD_FROM_AVERAGER
|
||||||
5
control/kwcombos.py
Normal file
5
control/kwcombos.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
from keyword import kwlist
|
||||||
|
from itertools import combinations
|
||||||
|
|
||||||
|
for combo in combinations(kwlist, 2):
|
||||||
|
print(*combo)
|
||||||
@@ -2,25 +2,25 @@
|
|||||||
"""
|
"""
|
||||||
Taxi simulator
|
Taxi simulator
|
||||||
|
|
||||||
Sample run with two cars, random seed = 4. This is a valid doctest.
|
Sample run with two cars, random seed 10. This is a valid doctest.
|
||||||
|
|
||||||
>>> main(num_taxis=2, seed=10)
|
>>> main(num_taxis=2, seed=10)
|
||||||
taxi: 0 Event(time=0, proc=0, action='leave garage')
|
taxi: 0 Event(time=0, proc=0, action='leave garage')
|
||||||
taxi: 0 Event(time=4, proc=0, action='pick up passenger')
|
taxi: 0 Event(time=4, proc=0, action='pick up passenger')
|
||||||
|
taxi: 1 Event(time=5, proc=1, action='leave garage')
|
||||||
|
taxi: 1 Event(time=9, proc=1, action='pick up passenger')
|
||||||
taxi: 0 Event(time=10, proc=0, action='drop off passenger')
|
taxi: 0 Event(time=10, proc=0, action='drop off passenger')
|
||||||
taxi: 1 Event(time=10, proc=1, action='leave garage')
|
taxi: 1 Event(time=12, proc=1, action='drop off passenger')
|
||||||
taxi: 1 Event(time=11, proc=1, action='pick up passenger')
|
taxi: 0 Event(time=17, proc=0, action='pick up passenger')
|
||||||
taxi: 0 Event(time=14, proc=0, action='pick up passenger')
|
taxi: 1 Event(time=19, proc=1, action='pick up passenger')
|
||||||
|
taxi: 1 Event(time=21, proc=1, action='drop off passenger')
|
||||||
|
taxi: 1 Event(time=24, proc=1, action='pick up passenger')
|
||||||
|
taxi: 0 Event(time=28, proc=0, action='drop off passenger')
|
||||||
taxi: 1 Event(time=28, proc=1, action='drop off passenger')
|
taxi: 1 Event(time=28, proc=1, action='drop off passenger')
|
||||||
taxi: 0 Event(time=32, proc=0, action='drop off passenger')
|
taxi: 0 Event(time=29, proc=0, action='going home')
|
||||||
taxi: 0 Event(time=33, proc=0, action='going home')
|
taxi: 1 Event(time=30, proc=1, action='pick up passenger')
|
||||||
taxi: 1 Event(time=33, proc=1, action='pick up passenger')
|
taxi: 1 Event(time=61, proc=1, action='drop off passenger')
|
||||||
taxi: 1 Event(time=35, proc=1, action='drop off passenger')
|
taxi: 1 Event(time=62, proc=1, action='going home')
|
||||||
taxi: 1 Event(time=38, proc=1, action='pick up passenger')
|
|
||||||
taxi: 1 Event(time=42, proc=1, action='drop off passenger')
|
|
||||||
taxi: 1 Event(time=44, proc=1, action='pick up passenger')
|
|
||||||
taxi: 1 Event(time=75, proc=1, action='drop off passenger')
|
|
||||||
taxi: 1 Event(time=76, proc=1, action='going home')
|
|
||||||
*** end of events ***
|
*** end of events ***
|
||||||
|
|
||||||
See explanation and longer sample run at the end of this module.
|
See explanation and longer sample run at the end of this module.
|
||||||
@@ -35,8 +35,9 @@ import argparse
|
|||||||
|
|
||||||
DEFAULT_NUMBER_OF_TAXIS = 3
|
DEFAULT_NUMBER_OF_TAXIS = 3
|
||||||
DEFAULT_END_TIME = 80
|
DEFAULT_END_TIME = 80
|
||||||
SEARCH_INTERVAL = 4
|
SEARCH_DURATION = 4
|
||||||
TRIP_DURATION = 10
|
TRIP_DURATION = 10
|
||||||
|
DEPARTURE_INTERVAL = 5
|
||||||
|
|
||||||
Event = collections.namedtuple('Event', 'time proc action')
|
Event = collections.namedtuple('Event', 'time proc action')
|
||||||
|
|
||||||
@@ -50,7 +51,7 @@ def taxi_process(ident, trips, start_time=0): # <1>
|
|||||||
"""Yield to simulator issuing event at each state change"""
|
"""Yield to simulator issuing event at each state change"""
|
||||||
time = yield Event(start_time, ident, 'leave garage') # <2>
|
time = yield Event(start_time, ident, 'leave garage') # <2>
|
||||||
for i in range(trips): # <3>
|
for i in range(trips): # <3>
|
||||||
prowling_ends = time + compute_delay(SEARCH_INTERVAL) # <4>
|
prowling_ends = time + compute_delay(SEARCH_DURATION) # <4>
|
||||||
time = yield Event(prowling_ends, ident, 'pick up passenger') # <5>
|
time = yield Event(prowling_ends, ident, 'pick up passenger') # <5>
|
||||||
|
|
||||||
trip_ends = time + compute_delay(TRIP_DURATION) # <6>
|
trip_ends = time + compute_delay(TRIP_DURATION) # <6>
|
||||||
@@ -107,7 +108,7 @@ def main(end_time=DEFAULT_END_TIME, num_taxis=DEFAULT_NUMBER_OF_TAXIS,
|
|||||||
if seed is not None:
|
if seed is not None:
|
||||||
random.seed(seed) # get reproducible results
|
random.seed(seed) # get reproducible results
|
||||||
|
|
||||||
taxis = {i: taxi_process(i, (i+1)*2, i*10)
|
taxis = {i: taxi_process(i, (i+1)*2, i*DEPARTURE_INTERVAL)
|
||||||
for i in range(num_taxis)}
|
for i in range(num_taxis)}
|
||||||
sim = Simulator(taxis)
|
sim = Simulator(taxis)
|
||||||
sim.run(end_time)
|
sim.run(end_time)
|
||||||
@@ -216,40 +217,40 @@ Notes for the ``Simulator.run`` method::
|
|||||||
sometimes).
|
sometimes).
|
||||||
|
|
||||||
|
|
||||||
Sample run from the command line::
|
Sample run from the command line, seed=24, total elapsed time=160::
|
||||||
|
|
||||||
# BEGIN TAXI_SAMPLE_RUN
|
# BEGIN TAXI_SAMPLE_RUN
|
||||||
$ clear; python3 taxi_sim.py -t 3 -s 19
|
$ python3 taxi_sim.py -s 24 -e 160
|
||||||
taxi: 0 Event(time=0, proc=0, action='leave garage')
|
taxi: 0 Event(time=0, proc=0, action='leave garage')
|
||||||
taxi: 0 Event(time=5, proc=0, action='pick up passenger')
|
taxi: 0 Event(time=5, proc=0, action='pick up passenger')
|
||||||
taxi: 1 Event(time=10, proc=1, action='leave garage')
|
taxi: 1 Event(time=5, proc=1, action='leave garage')
|
||||||
taxi: 1 Event(time=13, proc=1, action='pick up passenger')
|
taxi: 1 Event(time=6, proc=1, action='pick up passenger')
|
||||||
taxi: 2 Event(time=20, proc=2, action='leave garage')
|
taxi: 2 Event(time=10, proc=2, action='leave garage')
|
||||||
taxi: 0 Event(time=21, proc=0, action='drop off passenger')
|
taxi: 2 Event(time=11, proc=2, action='pick up passenger')
|
||||||
taxi: 1 Event(time=21, proc=1, action='drop off passenger')
|
taxi: 2 Event(time=23, proc=2, action='drop off passenger')
|
||||||
taxi: 1 Event(time=23, proc=1, action='pick up passenger')
|
taxi: 0 Event(time=24, proc=0, action='drop off passenger')
|
||||||
taxi: 2 Event(time=23, proc=2, action='pick up passenger')
|
taxi: 2 Event(time=24, proc=2, action='pick up passenger')
|
||||||
taxi: 1 Event(time=25, proc=1, action='drop off passenger')
|
taxi: 2 Event(time=26, proc=2, action='drop off passenger')
|
||||||
taxi: 1 Event(time=27, proc=1, action='pick up passenger')
|
taxi: 0 Event(time=30, proc=0, action='pick up passenger')
|
||||||
taxi: 2 Event(time=27, proc=2, action='drop off passenger')
|
taxi: 2 Event(time=31, proc=2, action='pick up passenger')
|
||||||
taxi: 2 Event(time=29, proc=2, action='pick up passenger')
|
taxi: 0 Event(time=43, proc=0, action='drop off passenger')
|
||||||
taxi: 1 Event(time=31, proc=1, action='drop off passenger')
|
taxi: 0 Event(time=44, proc=0, action='going home')
|
||||||
taxi: 2 Event(time=31, proc=2, action='drop off passenger')
|
taxi: 2 Event(time=46, proc=2, action='drop off passenger')
|
||||||
taxi: 1 Event(time=33, proc=1, action='pick up passenger')
|
taxi: 2 Event(time=49, proc=2, action='pick up passenger')
|
||||||
taxi: 2 Event(time=33, proc=2, action='pick up passenger')
|
taxi: 1 Event(time=70, proc=1, action='drop off passenger')
|
||||||
taxi: 2 Event(time=36, proc=2, action='drop off passenger')
|
taxi: 2 Event(time=70, proc=2, action='drop off passenger')
|
||||||
taxi: 2 Event(time=37, proc=2, action='pick up passenger')
|
taxi: 2 Event(time=71, proc=2, action='pick up passenger')
|
||||||
taxi: 2 Event(time=40, proc=2, action='drop off passenger')
|
taxi: 2 Event(time=79, proc=2, action='drop off passenger')
|
||||||
taxi: 1 Event(time=42, proc=1, action='drop off passenger')
|
taxi: 1 Event(time=88, proc=1, action='pick up passenger')
|
||||||
taxi: 1 Event(time=43, proc=1, action='going home')
|
taxi: 2 Event(time=92, proc=2, action='pick up passenger')
|
||||||
taxi: 0 Event(time=44, proc=0, action='pick up passenger')
|
taxi: 2 Event(time=98, proc=2, action='drop off passenger')
|
||||||
taxi: 2 Event(time=44, proc=2, action='pick up passenger')
|
taxi: 2 Event(time=99, proc=2, action='going home')
|
||||||
taxi: 0 Event(time=49, proc=0, action='drop off passenger')
|
taxi: 1 Event(time=102, proc=1, action='drop off passenger')
|
||||||
taxi: 0 Event(time=50, proc=0, action='going home')
|
taxi: 1 Event(time=104, proc=1, action='pick up passenger')
|
||||||
taxi: 2 Event(time=58, proc=2, action='drop off passenger')
|
taxi: 1 Event(time=135, proc=1, action='drop off passenger')
|
||||||
taxi: 2 Event(time=65, proc=2, action='pick up passenger')
|
taxi: 1 Event(time=136, proc=1, action='pick up passenger')
|
||||||
taxi: 2 Event(time=71, proc=2, action='drop off passenger')
|
taxi: 1 Event(time=151, proc=1, action='drop off passenger')
|
||||||
taxi: 2 Event(time=72, proc=2, action='going home')
|
taxi: 1 Event(time=152, proc=1, action='going home')
|
||||||
*** end of events ***
|
*** end of events ***
|
||||||
# END TAXI_SAMPLE_RUN
|
# END TAXI_SAMPLE_RUN
|
||||||
|
|
||||||
52
control/yield_from_expansion.py
Normal file
52
control/yield_from_expansion.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Code below is the expansion of the statement:
|
||||||
|
#
|
||||||
|
# RESULT = yield from EXPR
|
||||||
|
#
|
||||||
|
# Copied verbatim from the Formal Semantics section of
|
||||||
|
# PEP 380 -- Syntax for Delegating to a Subgenerator
|
||||||
|
#
|
||||||
|
# https://www.python.org/dev/peps/pep-0380/#formal-semantics
|
||||||
|
|
||||||
|
|
||||||
|
# BEGIN YIELD_FROM_EXPANSION
|
||||||
|
_i = iter(EXPR) # <1>
|
||||||
|
try:
|
||||||
|
_y = next(_i) # <2>
|
||||||
|
except StopIteration as _e:
|
||||||
|
_r = _e.value # <3>
|
||||||
|
else:
|
||||||
|
while 1: # <4>
|
||||||
|
try:
|
||||||
|
_s = yield _y # <5>
|
||||||
|
except GeneratorExit as _e: # <6>
|
||||||
|
try:
|
||||||
|
_m = _i.close
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
_m()
|
||||||
|
raise _e
|
||||||
|
except BaseException as _e: # <7>
|
||||||
|
_x = sys.exc_info()
|
||||||
|
try:
|
||||||
|
_m = _i.throw
|
||||||
|
except AttributeError:
|
||||||
|
raise _e
|
||||||
|
else: # <8>
|
||||||
|
try:
|
||||||
|
_y = _m(*_x)
|
||||||
|
except StopIteration as _e:
|
||||||
|
_r = _e.value
|
||||||
|
break
|
||||||
|
else: # <9>
|
||||||
|
try: # <10>
|
||||||
|
if _s is None: # <11>
|
||||||
|
_y = next(_i)
|
||||||
|
else:
|
||||||
|
_y = _i.send(_s)
|
||||||
|
except StopIteration as _e: # <12>
|
||||||
|
_r = _e.value
|
||||||
|
break
|
||||||
|
|
||||||
|
RESULT = _r # <13>
|
||||||
|
# END YIELD_FROM_EXPANSION
|
||||||
1
futures/countries/.gitignore
vendored
Normal file
1
futures/countries/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
flags/
|
||||||
8
futures/countries/country_codes.txt
Normal file
8
futures/countries/country_codes.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
AD AE AF AG AL AM AO AR AT AU AZ BA BB BD BE BF BG BH BI BJ BN BO BR BS BT
|
||||||
|
BW BY BZ CA CD CF CG CH CI CL CM CN CO CR CU CV CY CZ DE DJ DK DM DZ EC EE
|
||||||
|
EG ER ES ET FI FJ FM FR GA GB GD GE GH GM GN GQ GR GT GW GY HN HR HT HU ID
|
||||||
|
IE IL IN IQ IR IS IT JM JO JP KE KG KH KI KM KN KP KR KW KZ LA LB LC LI LK
|
||||||
|
LR LS LT LU LV LY MA MC MD ME MG MH MK ML MM MN MR MT MU MV MW MX MY MZ NA
|
||||||
|
NE NG NI NL NO NP NR NZ OM PA PE PG PH PK PL PT PW PY QA RO RS RU RW SA SB
|
||||||
|
SC SD SE SG SI SK SL SM SN SO SR SS ST SV SY SZ TD TG TH TJ TL TM TN TO TR
|
||||||
|
TT TV TW TZ UA UG US UY UZ VA VC VE VN VU WS YE ZA ZM ZW
|
||||||
148
futures/countries/flag_utils.py
Normal file
148
futures/countries/flag_utils.py
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
"""Utilities for second set of flag examples.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import sys
|
||||||
|
import string
|
||||||
|
import argparse
|
||||||
|
from collections import namedtuple
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
Result = namedtuple('Result', 'status data')
|
||||||
|
Counts = namedtuple('Counts', 'ok not_found error')
|
||||||
|
|
||||||
|
Status = Enum('Status', 'ok not_found error')
|
||||||
|
|
||||||
|
POP20_CC = ('CN IN US ID BR PK NG BD RU JP '
|
||||||
|
'MX PH VN ET EG DE IR TR CD FR').split()
|
||||||
|
|
||||||
|
DEFAULT_CONCUR_REQ = 1
|
||||||
|
MAX_CONCUR_REQ = 1
|
||||||
|
|
||||||
|
SERVERS = {
|
||||||
|
'REMOTE': 'http://python.pro.br/fluent/data/flags',
|
||||||
|
'LOCAL': 'http://localhost:8001/flags',
|
||||||
|
'DELAY': 'http://localhost:8002/flags',
|
||||||
|
'ERROR': 'http://localhost:8003/flags',
|
||||||
|
}
|
||||||
|
DEFAULT_SERVER = 'LOCAL'
|
||||||
|
|
||||||
|
DEST_DIR = 'downloads/'
|
||||||
|
COUNTRY_CODES_FILE = 'country_codes.txt'
|
||||||
|
|
||||||
|
|
||||||
|
def save_flag(img, filename):
|
||||||
|
path = os.path.join(DEST_DIR, filename)
|
||||||
|
with open(path, 'wb') as fp:
|
||||||
|
fp.write(img)
|
||||||
|
|
||||||
|
|
||||||
|
def initial_report(cc_list, actual_req, server_label):
|
||||||
|
if len(cc_list) <= 10:
|
||||||
|
cc_msg = ', '.join(cc_list)
|
||||||
|
else:
|
||||||
|
cc_msg = 'from {} to {}'.format(cc_list[0], cc_list[-1])
|
||||||
|
print('{} site: {}'.format(server_label, SERVERS[server_label]))
|
||||||
|
msg = 'Searching for {} flag{}: {}'
|
||||||
|
plural = 's' if len(cc_list) != 1 else ''
|
||||||
|
print(msg.format(len(cc_list), plural, cc_msg))
|
||||||
|
plural = 's' if actual_req != 1 else ''
|
||||||
|
msg = '{} concurrent connection{} will be used.'
|
||||||
|
print(msg.format(actual_req, plural))
|
||||||
|
|
||||||
|
|
||||||
|
def final_report(cc_list, counts, start_time):
|
||||||
|
elapsed = time.time() - start_time
|
||||||
|
print('-' * 20)
|
||||||
|
msg = '{} flag{} downloaded.'
|
||||||
|
plural = 's' if counts.ok != 1 else ''
|
||||||
|
print(msg.format(counts.ok, plural))
|
||||||
|
if counts.not_found:
|
||||||
|
print(counts.not_found, 'not found.')
|
||||||
|
if counts.error:
|
||||||
|
plural = 's' if counts.error != 1 else ''
|
||||||
|
print('{} error{}.'.format(counts.error, plural))
|
||||||
|
print('Elapsed time: {:.2f}s'.format(elapsed))
|
||||||
|
|
||||||
|
|
||||||
|
def expand_cc_args(every_cc, all_cc, cc_args, limit):
|
||||||
|
codes = set()
|
||||||
|
A_Z = string.ascii_uppercase
|
||||||
|
if every_cc:
|
||||||
|
codes.update(a+b for a in A_Z for b in A_Z)
|
||||||
|
elif all_cc:
|
||||||
|
with open(COUNTRY_CODES_FILE) as fp:
|
||||||
|
text = fp.read()
|
||||||
|
codes.update(text.split())
|
||||||
|
else:
|
||||||
|
for cc in (c.upper() for c in cc_args):
|
||||||
|
if len(cc) == 1 and cc in A_Z:
|
||||||
|
codes.update(cc+c for c in A_Z)
|
||||||
|
elif len(cc) == 2 and all(c in A_Z for c in cc):
|
||||||
|
codes.add(cc)
|
||||||
|
else:
|
||||||
|
msg = 'each CC argument must be A to Z or AA to ZZ.'
|
||||||
|
raise ValueError('*** Usage error: '+msg)
|
||||||
|
return sorted(codes)[:limit]
|
||||||
|
|
||||||
|
|
||||||
|
def process_args(default_concur_req):
|
||||||
|
server_options = ', '.join(sorted(SERVERS))
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description='Download flags for country codes. '
|
||||||
|
'Default: top 20 countries by population.')
|
||||||
|
parser.add_argument('cc', metavar='CC', nargs='*',
|
||||||
|
help='country code or 1st letter (eg. B for BA...BZ)')
|
||||||
|
parser.add_argument('-a', '--all', action='store_true',
|
||||||
|
help='get all available flags (AD to ZW)')
|
||||||
|
parser.add_argument('-e', '--every', action='store_true',
|
||||||
|
help='get flags for every possible code (AA...ZZ)')
|
||||||
|
parser.add_argument('-l', '--limit', metavar='N', type=int,
|
||||||
|
help='limit to N first codes', default=sys.maxsize)
|
||||||
|
parser.add_argument('-m', '--max_req', metavar='CONCURRENT', type=int,
|
||||||
|
default=default_concur_req,
|
||||||
|
help='maximum concurrent requests (default={})'
|
||||||
|
.format(default_concur_req))
|
||||||
|
parser.add_argument('-s', '--server', metavar='LABEL',
|
||||||
|
default=DEFAULT_SERVER,
|
||||||
|
help='Server to hit; one of {} (default={})'
|
||||||
|
.format(server_options, DEFAULT_SERVER))
|
||||||
|
parser.add_argument('-v', '--verbose', action='store_true',
|
||||||
|
help='output detailed progress info')
|
||||||
|
args = parser.parse_args()
|
||||||
|
if args.max_req < 1:
|
||||||
|
print('*** Usage error: --max_req CONCURRENT must be >= 1')
|
||||||
|
parser.print_usage()
|
||||||
|
sys.exit(1)
|
||||||
|
if args.limit < 1:
|
||||||
|
print('*** Usage error: --limit N must be >= 1')
|
||||||
|
parser.print_usage()
|
||||||
|
sys.exit(1)
|
||||||
|
args.server = args.server.upper()
|
||||||
|
if args.server not in SERVERS:
|
||||||
|
print('*** Usage error: --server LABEL must be one of',
|
||||||
|
server_options)
|
||||||
|
parser.print_usage()
|
||||||
|
sys.exit(1)
|
||||||
|
try:
|
||||||
|
cc_list = expand_cc_args(args.every, args.all, args.cc, args.limit)
|
||||||
|
except ValueError as exc:
|
||||||
|
print(exc.args[0])
|
||||||
|
parser.print_usage()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if not cc_list:
|
||||||
|
cc_list = sorted(POP20_CC)
|
||||||
|
return args, cc_list
|
||||||
|
|
||||||
|
|
||||||
|
def main(download_many, default_concur_req, max_concur_req):
|
||||||
|
args, cc_list = process_args(default_concur_req)
|
||||||
|
actual_req = min(args.max_req, max_concur_req, len(cc_list))
|
||||||
|
initial_report(cc_list, actual_req, args.server)
|
||||||
|
base_url = SERVERS[args.server]
|
||||||
|
t0 = time.time()
|
||||||
|
counts = download_many(cc_list, base_url, args.verbose, actual_req)
|
||||||
|
final_report(cc_list, counts, t0)
|
||||||
62
futures/countries/flags.py
Normal file
62
futures/countries/flags.py
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
"""Download flags of top 20 countries by population
|
||||||
|
|
||||||
|
Sequential version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$ python3 flags.py
|
||||||
|
BD retrieved.
|
||||||
|
BR retrieved.
|
||||||
|
CD retrieved.
|
||||||
|
...
|
||||||
|
TR retrieved.
|
||||||
|
US retrieved.
|
||||||
|
VN retrieved.
|
||||||
|
20 flags downloaded in 10.16s
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
POP20_CC = ('CN IN US ID BR PK NG BD RU JP '
|
||||||
|
'MX PH VN ET EG DE IR TR CD FR').split()
|
||||||
|
|
||||||
|
BASE_URL = 'http://python.pro.br/fluent/data/flags'
|
||||||
|
|
||||||
|
DEST_DIR = 'downloads/'
|
||||||
|
|
||||||
|
|
||||||
|
def save_flag(img, filename):
|
||||||
|
path = os.path.join(DEST_DIR, filename)
|
||||||
|
with open(path, 'wb') as fp:
|
||||||
|
fp.write(img)
|
||||||
|
|
||||||
|
|
||||||
|
def get_flag(cc):
|
||||||
|
url = '{}/{cc}/{cc}.gif'.format(BASE_URL, cc=cc.lower())
|
||||||
|
res = requests.get(url)
|
||||||
|
return res.content
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list):
|
||||||
|
for cc in sorted(cc_list):
|
||||||
|
image = get_flag(cc)
|
||||||
|
print('{} retrieved.'.format(cc))
|
||||||
|
save_flag(image, cc.lower() + '.gif')
|
||||||
|
|
||||||
|
return len(cc_list)
|
||||||
|
|
||||||
|
|
||||||
|
def main(download_many):
|
||||||
|
t0 = time.time()
|
||||||
|
count = download_many(POP20_CC)
|
||||||
|
elapsed = time.time() - t0
|
||||||
|
msg = '{} flags downloaded in {:.2f}s'
|
||||||
|
print(msg.format(count, elapsed))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many)
|
||||||
BIN
futures/countries/flags.zip
Normal file
BIN
futures/countries/flags.zip
Normal file
Binary file not shown.
112
futures/countries/flags2_asyncio.py
Normal file
112
futures/countries/flags2_asyncio.py
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
"""Download flags of top 10 countries by population
|
||||||
|
|
||||||
|
asyncio version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
from collections import namedtuple
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
from aiohttp import web
|
||||||
|
import tqdm
|
||||||
|
|
||||||
|
from flag_utils import main, save_flag, Counts
|
||||||
|
|
||||||
|
# default set low to avoid errors from remote site:
|
||||||
|
# 503 - Service Temporarily Unavailable
|
||||||
|
DEFAULT_CONCUR_REQ = 5
|
||||||
|
MAX_CONCUR_REQ = 1000
|
||||||
|
|
||||||
|
TIMEOUT = 120 # seconds
|
||||||
|
|
||||||
|
Status = Enum('Status', 'ok not_found error')
|
||||||
|
Result = namedtuple('Result', 'status data')
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def get_flag(base_url, cc):
|
||||||
|
url = '{}/{cc}/{cc}.gif'.format(base_url, cc=cc.lower())
|
||||||
|
res = yield from aiohttp.request('GET', url)
|
||||||
|
if res.status == 200:
|
||||||
|
image = yield from res.read()
|
||||||
|
return image
|
||||||
|
elif res.status == 404:
|
||||||
|
raise web.HTTPNotFound()
|
||||||
|
else:
|
||||||
|
raise aiohttp.errors.HttpProcessingError(
|
||||||
|
code=res.status, message=res.reason, headers=res.headers)
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def download_one(cc, base_url, semaphore, verbose):
|
||||||
|
try:
|
||||||
|
with (yield from semaphore):
|
||||||
|
image = yield from get_flag(base_url, cc)
|
||||||
|
except web.HTTPNotFound:
|
||||||
|
status = Status.not_found
|
||||||
|
msg = ''
|
||||||
|
except aiohttp.errors.HttpProcessingError as exc:
|
||||||
|
status = Status.error
|
||||||
|
msg = '{} failed: {exc.code} - {exc.message}'
|
||||||
|
msg = msg.format(cc, exc=exc)
|
||||||
|
except aiohttp.errors.ClientError as exc:
|
||||||
|
try:
|
||||||
|
context = exc.__context__.__class__.__name__
|
||||||
|
except AttributeError:
|
||||||
|
# we chain all exceptions, you should get original exception from __cause__
|
||||||
|
context = '(unknown context)'
|
||||||
|
msg = '{} failed: {}'.format(cc, context)
|
||||||
|
status = Status.error
|
||||||
|
else:
|
||||||
|
save_flag(image, cc.lower() + '.gif')
|
||||||
|
status = Status.ok
|
||||||
|
msg = 'OK'
|
||||||
|
|
||||||
|
if verbose and msg:
|
||||||
|
print(cc, msg)
|
||||||
|
|
||||||
|
return Result(status, cc)
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def downloader_coro(cc_list, base_url, verbose, max_req):
|
||||||
|
semaphore = asyncio.Semaphore(max_req)
|
||||||
|
to_do = [download_one(cc, base_url, semaphore, verbose) for cc in cc_list]
|
||||||
|
results = []
|
||||||
|
to_do_iter = asyncio.as_completed(to_do)
|
||||||
|
if not verbose:
|
||||||
|
to_do_iter = tqdm.tqdm(to_do_iter, total=len(cc_list))
|
||||||
|
for future in to_do_iter:
|
||||||
|
result = yield from future
|
||||||
|
results.append(result)
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list, base_url, verbose, max_req):
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
#loop.set_debug(True)
|
||||||
|
try:
|
||||||
|
coro = downloader_coro(cc_list, base_url, verbose, max_req)
|
||||||
|
done = loop.run_until_complete(coro)
|
||||||
|
except Exception as exc:
|
||||||
|
print('*' * 60)
|
||||||
|
print(exc)
|
||||||
|
print(vars(exc))
|
||||||
|
print('*' * 60)
|
||||||
|
counts = []
|
||||||
|
for status in Status:
|
||||||
|
counts.append(len([res for res in done
|
||||||
|
if res.status == status]))
|
||||||
|
loop.close()
|
||||||
|
|
||||||
|
return Counts(*counts)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many, DEFAULT_CONCUR_REQ, MAX_CONCUR_REQ)
|
||||||
100
futures/countries/flags2_asyncio_NOTQDM.py
Normal file
100
futures/countries/flags2_asyncio_NOTQDM.py
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
"""Download flags of top 10 countries by population
|
||||||
|
|
||||||
|
asyncio version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
from collections import namedtuple
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
from aiohttp import web
|
||||||
|
|
||||||
|
from flag_utils import main, save_flag, Counts
|
||||||
|
|
||||||
|
# default set low to avoid errors from remote site:
|
||||||
|
# 503 - Service Temporarily Unavailable
|
||||||
|
DEFAULT_CONCUR_REQ = 5
|
||||||
|
MAX_CONCUR_REQ = 1000
|
||||||
|
|
||||||
|
TIMEOUT = 120 # seconds
|
||||||
|
|
||||||
|
Status = Enum('Status', 'ok not_found error')
|
||||||
|
Result = namedtuple('Result', 'status data')
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def get_flag(base_url, cc):
|
||||||
|
url = '{}/{cc}/{cc}.gif'.format(base_url, cc=cc.lower())
|
||||||
|
res = yield from aiohttp.request('GET', url)
|
||||||
|
if res.status == 200:
|
||||||
|
image = yield from res.read()
|
||||||
|
return image
|
||||||
|
elif res.status == 404:
|
||||||
|
raise web.HTTPNotFound()
|
||||||
|
else:
|
||||||
|
raise aiohttp.errors.HttpProcessingError(
|
||||||
|
code=res.status, message=res.reason, headers=res.headers)
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def download_one(cc, base_url, semaphore, verbose):
|
||||||
|
try:
|
||||||
|
with (yield from semaphore):
|
||||||
|
image = yield from get_flag(base_url, cc)
|
||||||
|
except web.HTTPNotFound:
|
||||||
|
status = Status.not_found
|
||||||
|
msg = ''
|
||||||
|
except aiohttp.errors.HttpProcessingError as exc:
|
||||||
|
status = Status.error
|
||||||
|
msg = '{} failed: {exc.code} - {exc.message}'
|
||||||
|
msg = msg.format(cc, exc=exc)
|
||||||
|
except aiohttp.errors.ClientError as exc:
|
||||||
|
try:
|
||||||
|
context = exc.__context__.__class__.__name__
|
||||||
|
except AttributeError:
|
||||||
|
# we chain all exceptions, you should get original exception from __cause__
|
||||||
|
context = '(unknown context)'
|
||||||
|
msg = '{} failed: {}'.format(cc, context)
|
||||||
|
status = Status.error
|
||||||
|
else:
|
||||||
|
save_flag(image, cc.lower() + '.gif')
|
||||||
|
status = Status.ok
|
||||||
|
msg = 'OK'
|
||||||
|
|
||||||
|
if verbose and msg:
|
||||||
|
print(cc, msg)
|
||||||
|
|
||||||
|
return Result(status, cc)
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list, base_url, verbose, max_req):
|
||||||
|
semaphore = asyncio.Semaphore(max_req)
|
||||||
|
to_do = [download_one(cc, base_url, semaphore, verbose) for cc in cc_list]
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
#loop.set_debug(True)
|
||||||
|
try:
|
||||||
|
done, pending = loop.run_until_complete(asyncio.wait(to_do, timeout=TIMEOUT))
|
||||||
|
except Exception as exc:
|
||||||
|
print('*' * 60)
|
||||||
|
print(exc)
|
||||||
|
print(vars(exc))
|
||||||
|
print('*' * 60)
|
||||||
|
counts = []
|
||||||
|
for status in Status:
|
||||||
|
counts.append(len([task for task in done
|
||||||
|
if task.result().status == status]))
|
||||||
|
for task in pending:
|
||||||
|
task.cancel()
|
||||||
|
loop.close()
|
||||||
|
|
||||||
|
return Counts(*counts)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many, DEFAULT_CONCUR_REQ, MAX_CONCUR_REQ)
|
||||||
74
futures/countries/flags2_sequential.py
Normal file
74
futures/countries/flags2_sequential.py
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
"""Download flags of countries (with error handling).
|
||||||
|
|
||||||
|
Sequential version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import requests
|
||||||
|
import tqdm
|
||||||
|
|
||||||
|
from flag_utils import main, save_flag, Counts, Status, Result
|
||||||
|
|
||||||
|
|
||||||
|
DEFAULT_CONCUR_REQ = 1
|
||||||
|
MAX_CONCUR_REQ = 1
|
||||||
|
|
||||||
|
|
||||||
|
def get_flag(base_url, cc):
|
||||||
|
url = '{}/{cc}/{cc}.gif'.format(base_url, cc=cc.lower())
|
||||||
|
res = requests.get(url)
|
||||||
|
if res.status_code != 200:
|
||||||
|
res.raise_for_status()
|
||||||
|
return res.content
|
||||||
|
|
||||||
|
|
||||||
|
def download_one(cc, base_url, verbose=False):
|
||||||
|
try:
|
||||||
|
image = get_flag(base_url, cc)
|
||||||
|
except requests.exceptions.HTTPError as exc:
|
||||||
|
res = exc.response
|
||||||
|
if res.status_code == 404:
|
||||||
|
status = Status.not_found
|
||||||
|
msg = ''
|
||||||
|
else:
|
||||||
|
status = Status.error
|
||||||
|
msg = 'error {res.status_code} - {res.reason}'
|
||||||
|
msg = msg.format(res=exc.response)
|
||||||
|
except requests.exceptions.ConnectionError as exc:
|
||||||
|
status = Status.error
|
||||||
|
msg = 'failed: {}'.format(cc, exc.args)
|
||||||
|
else:
|
||||||
|
save_flag(image, cc.lower() + '.gif')
|
||||||
|
status = Status.ok
|
||||||
|
msg = 'OK'
|
||||||
|
|
||||||
|
if verbose and msg:
|
||||||
|
print(cc, msg)
|
||||||
|
|
||||||
|
return Result(status, cc)
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list, base_url, verbose, max_req):
|
||||||
|
counts = [0, 0, 0]
|
||||||
|
if not verbose:
|
||||||
|
cc_iter = tqdm.tqdm(sorted(cc_list))
|
||||||
|
else:
|
||||||
|
cc_iter = sorted(cc_list)
|
||||||
|
for cc in cc_iter:
|
||||||
|
try:
|
||||||
|
res = download_one(cc, base_url, verbose)
|
||||||
|
except Exception as exc:
|
||||||
|
msg = 'Unexpected exception for {}: {!r}'
|
||||||
|
print(msg.format(cc, exc))
|
||||||
|
else:
|
||||||
|
counts[res.status.value-1] += 1
|
||||||
|
|
||||||
|
return Counts(*counts)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many, DEFAULT_CONCUR_REQ, MAX_CONCUR_REQ)
|
||||||
42
futures/countries/flags2_threadpool.py
Normal file
42
futures/countries/flags2_threadpool.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
"""Download flags of top 10 countries by population
|
||||||
|
|
||||||
|
ThreadPool version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from concurrent import futures
|
||||||
|
|
||||||
|
import tqdm
|
||||||
|
|
||||||
|
from flag_utils import main, Counts
|
||||||
|
from flags2_sequential import get_flag, download_one
|
||||||
|
|
||||||
|
DEFAULT_CONCUR_REQ = 30
|
||||||
|
MAX_CONCUR_REQ = 1000
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list, base_url, verbose, concur_req):
|
||||||
|
with futures.ThreadPoolExecutor(concur_req) as executor:
|
||||||
|
to_do = [executor.submit(download_one, cc, base_url, verbose)
|
||||||
|
for cc in sorted(cc_list)]
|
||||||
|
counts = [0, 0, 0]
|
||||||
|
to_do_iter = futures.as_completed(to_do)
|
||||||
|
if not verbose:
|
||||||
|
to_do_iter = tqdm.tqdm(to_do_iter, total=len(cc_list))
|
||||||
|
for future in to_do_iter:
|
||||||
|
try:
|
||||||
|
res = future.result()
|
||||||
|
except Exception as exc:
|
||||||
|
print('*** Unexpected exception:', exc)
|
||||||
|
else:
|
||||||
|
counts[res.status.value-1] += 1
|
||||||
|
|
||||||
|
return Counts(*counts)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many, DEFAULT_CONCUR_REQ, MAX_CONCUR_REQ)
|
||||||
122
futures/countries/flags3_asyncio.py
Normal file
122
futures/countries/flags3_asyncio.py
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
"""Download flags of top 10 countries by population
|
||||||
|
|
||||||
|
asyncio version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$ python3 pop10_asyncio1.py
|
||||||
|
CN retrieved.
|
||||||
|
US retrieved.
|
||||||
|
BR retrieved.
|
||||||
|
NG retrieved.
|
||||||
|
PK retrieved.
|
||||||
|
RU retrieved.
|
||||||
|
ID retrieved.
|
||||||
|
IN retrieved.
|
||||||
|
BD retrieved.
|
||||||
|
JP retrieved.
|
||||||
|
10 flags downloaded in 0.45s
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
from collections import namedtuple
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
from aiohttp import web
|
||||||
|
|
||||||
|
from flags_sequential2 import BASE_URL
|
||||||
|
from flags_sequential2 import save_flag, main, Counts
|
||||||
|
|
||||||
|
MAX_TASKS = 100 if 'localhost' in BASE_URL else 5
|
||||||
|
TIMEOUT = 120 # seconds
|
||||||
|
|
||||||
|
Status = Enum('Status', 'ok not_found error')
|
||||||
|
Result = namedtuple('Result', 'status data')
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def http_get(url):
|
||||||
|
res = yield from aiohttp.request('GET', url)
|
||||||
|
if res.status == 200:
|
||||||
|
ctype = res.headers.get('Content-type', '').lower()
|
||||||
|
|
||||||
|
if 'json' in ctype or url.endswith('json'):
|
||||||
|
data = yield from res.json()
|
||||||
|
else:
|
||||||
|
data = yield from res.read()
|
||||||
|
return data
|
||||||
|
elif res.status == 404:
|
||||||
|
raise web.HTTPNotFound()
|
||||||
|
else:
|
||||||
|
raise aiohttp.errors.HttpProcessingError(
|
||||||
|
code=res.status, message=res.reason, headers=res.headers)
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def get_flag(cc):
|
||||||
|
url = '{}/{cc}/{cc}.gif'.format(BASE_URL, cc=cc.lower())
|
||||||
|
return (yield from http_get(url))
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def get_country(cc):
|
||||||
|
url = '{}/{cc}/metadata.json'.format(BASE_URL, cc=cc.lower())
|
||||||
|
metadata = yield from http_get(url)
|
||||||
|
return metadata['country']
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def download_one(cc, semaphore):
|
||||||
|
try:
|
||||||
|
with (yield from semaphore):
|
||||||
|
image = yield from get_flag(cc)
|
||||||
|
with (yield from semaphore):
|
||||||
|
country = yield from get_country(cc)
|
||||||
|
except web.HTTPNotFound:
|
||||||
|
status = Status.not_found
|
||||||
|
except aiohttp.errors.HttpProcessingError as exc:
|
||||||
|
msg = '{} failed: {exc.code} - {exc.message}'
|
||||||
|
print(msg.format(cc, exc=exc))
|
||||||
|
status = Status.error
|
||||||
|
except aiohttp.errors.ClientResponseError as exc:
|
||||||
|
try:
|
||||||
|
context = exc.__context__.__class__.__name__
|
||||||
|
except AttributeError:
|
||||||
|
context = '(unknown context)'
|
||||||
|
msg = '{} failed: {}'
|
||||||
|
print(msg.format(cc, context))
|
||||||
|
status = Status.error
|
||||||
|
else:
|
||||||
|
print('{} retrieved.'.format(cc.upper()))
|
||||||
|
country = country.replace(' ', '_')
|
||||||
|
save_flag(image, '{}-{}.gif'.format(country, cc))
|
||||||
|
status = Status.ok
|
||||||
|
return Result(status, cc)
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list):
|
||||||
|
semaphore = asyncio.Semaphore(MAX_TASKS)
|
||||||
|
to_do = [download_one(cc, semaphore) for cc in cc_list]
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
#loop.set_debug(True)
|
||||||
|
try:
|
||||||
|
done, pending = loop.run_until_complete(asyncio.wait(to_do, timeout=TIMEOUT))
|
||||||
|
except Exception as exc:
|
||||||
|
print('*' * 60)
|
||||||
|
print(exc)
|
||||||
|
print(vars(exc))
|
||||||
|
print('*' * 60)
|
||||||
|
counts = []
|
||||||
|
for status in Status:
|
||||||
|
counts.append(len([task for task in done
|
||||||
|
if task.result().status == status]))
|
||||||
|
for task in pending:
|
||||||
|
task.cancel()
|
||||||
|
loop.close()
|
||||||
|
|
||||||
|
return Counts(*counts)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many)
|
||||||
77
futures/countries/flags3_threadpool.py
Normal file
77
futures/countries/flags3_threadpool.py
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
"""Download flags of top 10 countries by population
|
||||||
|
|
||||||
|
ThreadPool version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$ python3 pop10_threadpool1.py
|
||||||
|
BR retrieved.
|
||||||
|
PK retrieved.
|
||||||
|
BD retrieved.
|
||||||
|
JP retrieved.
|
||||||
|
CN retrieved.
|
||||||
|
IN retrieved.
|
||||||
|
RU retrieved.
|
||||||
|
NG retrieved.
|
||||||
|
US retrieved.
|
||||||
|
ID retrieved.
|
||||||
|
10 flags downloaded in 0.63s
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from concurrent import futures
|
||||||
|
from collections import namedtuple
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
from flags_sequential2 import BASE_URL
|
||||||
|
from flags_sequential2 import save_flag, get_flag, main, Counts
|
||||||
|
|
||||||
|
MAX_WORKERS = 200
|
||||||
|
|
||||||
|
Status = Enum('Status', 'ok not_found error')
|
||||||
|
Result = namedtuple('Result', 'status data')
|
||||||
|
|
||||||
|
|
||||||
|
def get_country(cc):
|
||||||
|
url = '{}/{cc}/metadata.json'.format(BASE_URL, cc=cc.lower())
|
||||||
|
res = requests.get(url)
|
||||||
|
if res.status_code != 200:
|
||||||
|
res.raise_for_status()
|
||||||
|
return res.json()['country']
|
||||||
|
|
||||||
|
|
||||||
|
def download_one(cc):
|
||||||
|
try:
|
||||||
|
image = get_flag(cc)
|
||||||
|
country = get_country(cc)
|
||||||
|
except requests.exceptions.HTTPError as exc:
|
||||||
|
res = exc.response
|
||||||
|
if res.status_code == 404:
|
||||||
|
status = Status.not_found
|
||||||
|
else:
|
||||||
|
msg = '{} failed: {res.status_code} - {res.reason}'
|
||||||
|
print(msg.format(cc, res=exc.response))
|
||||||
|
status = Status.error
|
||||||
|
else:
|
||||||
|
print('{} retrieved.'.format(cc))
|
||||||
|
country = country.replace(' ', '_')
|
||||||
|
save_flag(image, '{}-{}.gif'.format(country, cc))
|
||||||
|
status = Status.ok
|
||||||
|
return Result(status, cc)
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list):
|
||||||
|
workers = min(len(cc_list), MAX_WORKERS)
|
||||||
|
with futures.ThreadPoolExecutor(workers) as executor:
|
||||||
|
res = executor.map(download_one, sorted(cc_list))
|
||||||
|
res = list(res)
|
||||||
|
counts = []
|
||||||
|
for status in Status:
|
||||||
|
counts.append(len([r for r in res if r.status == status]))
|
||||||
|
return Counts(*counts)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many)
|
||||||
45
futures/countries/flags_asyncio0.py
Normal file
45
futures/countries/flags_asyncio0.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
"""Download flags of top 20 countries by population
|
||||||
|
|
||||||
|
asyncio+aiottp version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$ python3 flags_asyncio0.py
|
||||||
|
EG retrieved.
|
||||||
|
BD retrieved.
|
||||||
|
JP retrieved.
|
||||||
|
...
|
||||||
|
CD retrieved.
|
||||||
|
PH retrieved.
|
||||||
|
ET retrieved.
|
||||||
|
20 flags downloaded in 1.05s
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
|
||||||
|
from flags import BASE_URL, save_flag, main
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def download_one(cc):
|
||||||
|
url = '{}/{cc}/{cc}.gif'.format(BASE_URL, cc=cc.lower())
|
||||||
|
res = yield from aiohttp.request('GET', url)
|
||||||
|
image = yield from res.read()
|
||||||
|
print('{} retrieved.'.format(cc))
|
||||||
|
save_flag(image, cc.lower() + '.gif')
|
||||||
|
return cc
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list):
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
to_do = [download_one(cc) for cc in cc_list]
|
||||||
|
res, _ = loop.run_until_complete(asyncio.wait(to_do))
|
||||||
|
loop.close()
|
||||||
|
return len(res)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many)
|
||||||
51
futures/countries/flags_asyncio1.py
Normal file
51
futures/countries/flags_asyncio1.py
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
"""Download flags of top 20 countries by population
|
||||||
|
|
||||||
|
asyncio+aiottp version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$ python3 flags_asyncio.py
|
||||||
|
NG retrieved.
|
||||||
|
FR retrieved.
|
||||||
|
IN retrieved.
|
||||||
|
...
|
||||||
|
EG retrieved.
|
||||||
|
DE retrieved.
|
||||||
|
IR retrieved.
|
||||||
|
20 flags downloaded in 1.08s
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
|
||||||
|
from flags import BASE_URL, save_flag, main
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def get_flag(cc):
|
||||||
|
url = '{}/{cc}/{cc}.gif'.format(BASE_URL, cc=cc.lower())
|
||||||
|
res = yield from aiohttp.request('GET', url)
|
||||||
|
image = yield from res.read()
|
||||||
|
return image
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def download_one(cc):
|
||||||
|
image = yield from get_flag(cc)
|
||||||
|
print('{} retrieved.'.format(cc))
|
||||||
|
save_flag(image, cc.lower() + '.gif')
|
||||||
|
return cc
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list):
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
to_do = [download_one(cc) for cc in cc_list]
|
||||||
|
res, _ = loop.run_until_complete(asyncio.wait(to_do))
|
||||||
|
loop.close()
|
||||||
|
return len(res)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many)
|
||||||
61
futures/countries/flags_asyncio2.py
Normal file
61
futures/countries/flags_asyncio2.py
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
"""Download flags of top 20 countries by population
|
||||||
|
|
||||||
|
asyncio+aiottp version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$ python3 flags_asyncio.py
|
||||||
|
NG retrieved.
|
||||||
|
FR retrieved.
|
||||||
|
IN retrieved.
|
||||||
|
...
|
||||||
|
EG retrieved.
|
||||||
|
DE retrieved.
|
||||||
|
IR retrieved.
|
||||||
|
20 flags downloaded in 1.08s
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
|
||||||
|
from flags import BASE_URL, save_flag, main
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def get_flag(cc):
|
||||||
|
url = '{}/{cc}/{cc}.gif'.format(BASE_URL, cc=cc.lower())
|
||||||
|
res = yield from aiohttp.request('GET', url)
|
||||||
|
image = yield from res.read()
|
||||||
|
return image
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def download_one(cc):
|
||||||
|
image = yield from get_flag(cc)
|
||||||
|
print('{} retrieved.'.format(cc))
|
||||||
|
save_flag(image, cc.lower() + '.gif')
|
||||||
|
return cc
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def downloader_coro(cc_list):
|
||||||
|
to_do = [download_one(cc) for cc in cc_list]
|
||||||
|
results = []
|
||||||
|
for future in asyncio.as_completed(to_do):
|
||||||
|
print(future)
|
||||||
|
result = yield from future
|
||||||
|
results.append(result)
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list):
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
results = loop.run_until_complete(downloader_coro(cc_list))
|
||||||
|
loop.close()
|
||||||
|
return len(results)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many)
|
||||||
42
futures/countries/flags_threadpool.py
Normal file
42
futures/countries/flags_threadpool.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
"""Download flags of top 20 countries by population
|
||||||
|
|
||||||
|
ThreadPool version
|
||||||
|
|
||||||
|
Sample run::
|
||||||
|
|
||||||
|
$ python3 flags_threadpool.py
|
||||||
|
BD retrieved.
|
||||||
|
EG retrieved.
|
||||||
|
CN retrieved.
|
||||||
|
...
|
||||||
|
PH retrieved.
|
||||||
|
US retrieved.
|
||||||
|
IR retrieved.
|
||||||
|
20 flags downloaded in 0.93s
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from concurrent import futures
|
||||||
|
|
||||||
|
from flags import save_flag, get_flag, main
|
||||||
|
|
||||||
|
MAX_WORKERS = 100
|
||||||
|
|
||||||
|
|
||||||
|
def download_one(cc):
|
||||||
|
image = get_flag(cc)
|
||||||
|
print('{} retrieved.'.format(cc.upper()))
|
||||||
|
save_flag(image, cc.lower() + '.gif')
|
||||||
|
return cc
|
||||||
|
|
||||||
|
|
||||||
|
def download_many(cc_list):
|
||||||
|
workers = min(len(cc_list), MAX_WORKERS)
|
||||||
|
with futures.ThreadPoolExecutor(workers) as executor:
|
||||||
|
res = executor.map(download_one, sorted(cc_list))
|
||||||
|
|
||||||
|
return len(list(res))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(download_many)
|
||||||
4
futures/countries/vaurien_delay.sh
Executable file
4
futures/countries/vaurien_delay.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
vaurien --protocol http --backend localhost:8001 \
|
||||||
|
--proxy localhost:8002 \
|
||||||
|
--behavior 100:delay --behavior-delay-sleep .5
|
||||||
4
futures/countries/vaurien_error_delay.sh
Executable file
4
futures/countries/vaurien_error_delay.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
vaurien --protocol http --backend localhost:8001 \
|
||||||
|
--proxy localhost:8003 \
|
||||||
|
--behavior 25:error,50:delay --behavior-delay-sleep .5
|
||||||
Reference in New Issue
Block a user