Я пытаюсь записать адрес местоположения на свой лист excel, используя пакет xlswriter в python. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь запустить функцию с помощью потока, значения не записываются на рабочий лист. См. приведенный ниже код: Здесь выводится список, содержащий все необработанные адреса.
import threading
import xlsxwriter
from geopy.geocoders import Nominatim
geolocator = Nominatim()
outputLocation = 'output.xlsx'
workbook = xlsxwriter.Workbook(outputLocation)
w_sheet4 = workbook.add_worksheet('openstreet')
def openstreet():
p = 1
for row in rows: #rows consists of raw addresses
try:
rawAddress = str(" ".join(row[1].strip().split())) #here I am normalizing the addresses using openstreet api
location = geolocator.geocode(rawAddress)
w_sheet4.write(p, 1, rawAddress)
w_sheet4.write(p, 2, str(location.address))
except Exception as e:
print "OpenStreet", e
p += 1
t4 = threading.Thread(target=openstreet)
t4.start()
Я могу писать на рабочий лист, если я не использую поток и запускаю функцию, вызывая ее. См. приведенный ниже код:
import threading
import xlsxwriter
from geopy.geocoders import Nominatim
geolocator = Nominatim()
outputLocation = 'output.xlsx'
workbook = xlsxwriter.Workbook(outputLocation)
w_sheet4 = workbook.add_worksheet('openstreet')
def openstreet():
p = 1
for row in rows: #rows consists of raw addresses
try:
rawAddress = str(" ".join(row[1].strip().split())) #here I am normalizing the addresses using openstreet api
location = geolocator.geocode(rawAddress)
w_sheet4.write(p, 1, rawAddress) #raw address
w_sheet4.write(p, 2, str(location.address)) #normalize address
except Exception as e:
print "OpenStreet", e
p += 1
#t4 = threading.Thread(target=openstreet)
#t4.start()
openstreet()
Причина, по которой я использую поток, заключается в том, что я использую несколько API (google, yahoo, openstreetmap API, bing), пытаясь нормализовать адреса и сравнить их. Может ли кто-нибудь помочь мне, почему я не могу писать на лист, когда использую поток вместо обычного вызова функции.
workbook.close()
, чтобы написать книгу. - person jmcnamara   schedule 05.08.2015