Ich versuche, ein Bild mit Boto in S3-Bucket hochzuladen. Nachdem das Bild erfolgreich hochgeladen wurde, möchte ich eine bestimmte Operation unter Verwendung der Datei-URL des Bilds im S3-Bucket ausführen. Das Problem ist, dass das Bild manchmal nicht schnell genug hochgeladen wird und ich einen Serverfehler erhalte, wenn ich den Vorgang abhängig von der Datei-URL des Bildes ausführen möchte.Wie kann überprüft werden, ob eine Datei das Hochladen in S3 Bucket mit Boto in Python abgeschlossen hat?
Dies ist mein Quellcode. Ich benutze Pythonflasche.
Die Methode jsonify benötigt eine gültige Image-URL, um den Vorgang auszuführen. Es funktioniert manchmal, manchmal nicht. Der Grund dafür liegt vermutlich darin, dass das Bild zum Zeitpunkt der Ausführung dieser Codezeile noch nicht hochgeladen wurde.
Die perform_actual_search Methode ist wie folgt:
def get_image_search_results(image_url):
global description
url = ('http://style.vsapi01.com/api-search/by-url/?apikey=%s&url=%s' % (just_visual_api_key, image_url))
h = httplib2.Http()
response, content = h.request(url,
'GET') # alternatively write content=h.request((url,'GET')[1]) ///Numbr 2 in our array
result = json.loads(content)
result_dictionary = []
for i in range(0, 10):
if result:
try:
if result['errorMessage']:
result_dictionary = []
except:
pass
if result['images'][i]:
images = result['images'][i]
jv_img_url = images['imageUrl']
title = images['title']
try:
if images['description']:
description = images['description']
else:
description = "no description"
except:
pass
# print("\njv_img_url: %s,\ntitle: %s,\ndescription: %s\n\n"% (
# jv_img_url, title, description))
image_info = {
'image_url': jv_img_url,
'title': title,
'description': description,
}
result_dictionary.append(image_info)
if result_dictionary != []:
# for i in range(len(result_dictionary)):
# print (result_dictionary[i])
# print("\n\n")
return result_dictionary
else:
return []
def performSearch(jv_input_dictionary, imagernce_products_dict):
print jv_input_dictionary
print imagernce_products_dict
global common_desc_ratio
global isReady
image_search_results = []
if jv_input_dictionary != []:
for i in range(len(jv_input_dictionary)):
print jv_input_dictionary[i]
for key in jv_input_dictionary[i]:
if key == 'description':
input_description = jv_input_dictionary[i][key]
s1w = re.findall('\w+', input_description.lower())
s1count = Counter(s1w)
print input_description
for j in imagernce_products_dict:
if j == 'Products':
for q in range(len(imagernce_products_dict['Products'])):
for key2 in imagernce_products_dict['Products'][q]:
if key2 == 'description':
search_description = imagernce_products_dict['Products'][q]['description']
print search_description
s2w = re.findall('\w+', search_description.lower())
s2count = Counter(s2w)
# Commonality magic
common_desc_ratio = difflib.SequenceMatcher(None, s1w, s2w).ratio()
print('Common ratio is: %.2f' % common_desc_ratio)
if common_desc_ratio > 0.09:
image_search_results.append(imagernce_products_dict['Products'][q])
if image_search_results:
print image_search_results
return image_search_results
else:
return {'404': 'No retailers registered with us currently own this product.'}
def perform_actual_search(image_url, imagernce_product_dictionary):
return performSearch(get_image_search_results(image_url), imagernce_product_dictionary)
Jede Hilfe dieser Lösung würde sehr geschätzt werden.
Ich habe versucht, meinen Code wie oben zu trennen und noch habe ich Probleme .. – KudzieChase