Ich habe eine Funktion, die in einem einzigen Thread funktioniert. Hier ist ein vereinfachtes Beispiel. Grundsätzlich möchte ich ein paar tote Links überprüfen und das Ergebnis in jedem Element in einer Liste von Wörterbüchern speichern.Verwendung von Multiprocessing für eine Funktion schlägt fehl mit - String-Indizes müssen Ganzzahlen sein
import requests
import sys
import logging
def main():
urls_to_check = [{'url': 'http://example.com'},
{'url': 'http://example.com'},
{'url': 'http://example.com'}]
print check_for_404(urls_to_check)
def check_for_404(urls_to_check):
for item in urls_to_check:
r = requests.get(item['url'])
item.update({'responseCode': r.status_code})
return urls_to_check
if __name__ == '__main__':
try:
main()
except:
logging.error("Unexpected error:" + str(sys.exc_info()))
Ausgänge:
[{'url': 'http://example.com', 'responseCode': 200}, {'url': 'http://example.com', 'responseCode': 200}, {'url': 'http://example.com', 'responseCode': 200}]
Und ich bin glücklich mit diesem
Nun, wenn ich Multiprozessing implementieren, die ich verstehe, ist eine iterable über mehrere Kerne aufteilen und führen Teile der Iterable durch die Funktion ...
import requests
import sys
import logging
from multiprocessing import Pool
def main():
urls_to_check = [{'url': 'http://example.com'},
{'url': 'http://example.com'},
{'url': 'http://example.com'}]
p = Pool(5)
print p.map(check_for_404, urls_to_check)
def check_for_404(urls_to_check):
for item in urls_to_check:
r = requests.get(item['url'])
item.update({'responseCode': r.status_code})
return urls_to_check
if __name__ == '__main__':
try:
main()
except:
logging.error("Unexpected error:" + str(sys.exc_info()))
ich den Fehler TypeError('string indices must be integers, not str',), <traceback object at 0x10ad6c128>)
Wie kann ich Multiprozessing implementieren, damit ich eine lange Liste von URLs schneller verarbeiten kann?
Dies ist das Tutorial Ich betrachte: https://docs.python.org/2/library/multiprocessing.html
zeigen Bitte die vollständige Fehlermeldung und vollständige Rückverfolgung. – BrenBarn
Alles fertig. Sorry –