Lassen Sie mich zuerst damit beginnen, indem ich sage, dass ich keine echte Erfahrung mit Multithreading habe. Dieses Skript, das ich geschrieben habe, liest ~ 4.400 Adressen aus einer Textdatei und bereinigt dann die Adresse und geocodiert es. Mein Bruder hat etwas über die Verwendung von Multithreading erwähnt, um die Geschwindigkeit zu erhöhen. Ich habe online gelesen, dass Multithreading keinen großen Unterschied macht, wenn Sie nur eine einzige Textdatei verwenden. Würde es funktionieren, wenn ich die einzelne Textdatei in 2 Textdateien aufspalte? Wie auch immer, ich würde es wirklich schätzen, wenn mir jemand zeigen könnte, wie man Multithreading oder Multiprocessing für dieses Skript implementiert, um die Geschwindigkeit zu erhöhen. Wenn es nicht möglich ist, könnten Sie mir sagen, warum? Vielen Dank!Implementieren Multithreading (oder Multiprozessing?) Mit diesem Skript?
from geopy.geocoders import Bing
from geopy.exc import GeocoderTimedOut
geolocator = Bing('vadrPcGdNLSX5bPNL7tw~ySbwhthllg7rNA4VSJ-O4g~Ag28cbu9Slxp5Sh_AsBDuQ9WypPuEhl9pHVPCAkiPf4A9FgCBf3l0KyQTKKsLCHw')
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
def cleanAddress(dirty):
try:
clean = geolocator.geocode(dirty)
x = clean.address
address, city, zipcode, country = x.split(",")
address = address.lower()
if 'first' in address:
address = address.replace('first', '1st')
elif 'second' in address:
address = address.replace('second', '2nd')
elif 'third' in address:
address = address.replace('third', '3rd')
elif 'fourth' in address:
address = address.replace('fourth', '4th')
elif 'fifth' in address:
address = address.replace('fifth', '5th')
elif 'sixth' in address:
address = address.replace('ave', '')
address = address.replace('avenue', '')
address = address.replace('sixth', 'avenue of the americas')
elif '6th' in address:
address = address.replace('ave', '')
address = address.replace('avenue', '')
address = address.replace('6th', 'avenue of the americas')
elif 'seventh' in address:
address = address.replace('seventh', '7th')
elif 'fashion' in address:
address = address.replace('fashion', '7th')
elif 'eighth' in address:
address = address.replace('eighth', '8th')
elif 'ninth' in address:
address = address.replace('ninth', '9th')
elif 'tenth' in address:
address = address.replace('tenth', '10th')
elif 'eleventh' in address:
address = address.replace('eleventh', '11th')
zipcode = zipcode[3:]
print(address + ",", zipcode.lstrip() + ",", str(clean.latitude) + ",", str(clean.longitude))
except AttributeError:
print('Can not be cleaned')
except ValueError:
print('Can not be cleaned')
except GeocoderTimedOut as e:
print('Can not be cleaned')
def main():
root.update()
fpath = filedialog.askopenfilename()
f = open(fpath)
for line in f:
dirty = line + " nyc"
cleanAddress(dirty)
f.close()
if __name__ == '__main__':
main()
Vielen Dank für die Erklärung. Dieser Code benötigt ungefähr 45 Minuten, um die Textdatei vollständig auszuführen, aber das ist der Zeitpunkt, an dem ich ein iPhone als drahtlosen Hotspot benutze (das Arbeitsnetzwerk erlaubt Python derzeit keine externen Verbindungen mit Bibliotheken, aber das wird es sein) bald behoben). Haben Sie eine Idee, wie viel schneller dieses Programm auf einer Internetverbindung mit durchschnittlicher Geschwindigkeit wäre? – Harrison
Beste "Danke", die ich bekommen kann, ist upvote meiner Antwort und überprüfen Sie Frage als beantwortet. Ich kann Ihnen nicht sagen, wie viel schneller dieses Programm bei einer durchschnittlichen Internetverbindungsgeschwindigkeit wäre, weil ich keine Ahnung habe, was "durchschnittliche" Geschwindigkeit ist und ob "entfernte Geo-Lokalisierungsdienste" dies besser handhaben können als jetzt. –
Das mag eine blöde Frage sein, aber würde es funktionieren, wenn ich die Textdatei in 2 Teile zerlege und 2 Instanzen von Python öffne und das Programm auf jeder Hälfte zur gleichen Zeit ablaufen lasse? – Harrison