2016-09-30 8 views
2

ich ein Multiprocessing mit multiprocessing.Pool Moduls Python, bekam aber TypeError: list indices must be integers, not str Fehler:Multiprozessing pool.map() bekam "Typeerror: Liste Indizes müssen ganze Zahlen sein, nicht str"

def getData(qid): 
    r = requests.get("http://api.xxx.com/api?qid=" + qid) 
    if r.status == 200: 
     DBC.save(json.loads(r.text)) 

def getAnotherData(qid): 
    r = requests.get("http://api.xxxx.com/anotherapi?qid=" + qid) 
    if r.status == 200: 
     DBC.save(json.loads(r.text)) 

def getAllData(qid): 
    print qid 
    getData(str(qid)) 
    getAnotherData(str(qid)) 


if __name__ == "__main__": 
    pool = Pool(processes=200) 
    pool.map(getAllData, range(10000, 700000)) 
:

Hier ist mein Code

nach dem Code für einige Zeit (nicht sofort) ausgeführt wird, wird eine Ausnahme aus

geworfen wird
pool.map(getAllData, range(10000, 700000)) 
    File "/usr/lib/python2.7/multiprocessing/pool.py", line 251, in map 
    return self.map_async(func, iterable, chunksize).get() 
    File "/usr/lib/python2.7/multiprocessing/pool.py", line 567, in get 
    raise self._value 
TypeError: list indices must be integers, not str 

Was könnte falsch sein? Ist es ein Fehler des Moduls ?

Antwort

3

Wenn eine Worker-Task eine Ausnahme auslöst, wird sie von abgefangen, zurück an den übergeordneten Prozess gesendet und die Ausnahme wird erneut aufgerufen. Dadurch wird jedoch nicht der ursprüngliche Traceback beibehalten Prozess, der nicht sehr hilfreich ist). Bei einer Schätzung erwartet etwas in DBC.save einen von JSON geladenen Wert als int, und tatsächlich ist es ein str.

Wenn Sie die realen Zurückverfolgungs, import traceback auf höchstem Niveau sehen wollen, und ändern Sie die oberste Ebene Ihres Arbeiter Funktion:

def getAllData(qid): 
    try: 
     print qid 
     getData(str(qid)) 
     getAnotherData(str(qid)) 
    except: 
     traceback.print_exc() 
     raise 

so können Sie die echten Zurückverfolgungs in dem Arbeiter sehen, nicht nur die kastrierte, meist nutzlose Traceback im Elternteil.

+0

Danke, Mann, das gibt mir wirklich einen Hinweis! – armnotstrong

Verwandte Themen