2017-06-28 1 views
-1

Ich versuche, durch eine Liste von URLs zu iterieren, aber die Ausgabe, die ich bekomme, ist Zeichen für Zeichen, nicht Zeile für Zeile. Wenn es ohne Multiprocessing läuft, funktioniert es perfekt. Wenn ich versuche, mehrere Prozesse zu verarbeiten, beginnt es jedoch, Zeichen für Zeichen zu lesen. Warum ist das?Python - Iterator wird Zeichen für Zeichen, nicht Zeile für Zeile (wenn Multiprozessing)

Ich habe ausführlich gelesen, wie man Zeile für Zeile liest, und es sieht für mich so aus, wie ich es richtig mache. Wo gehe ich falsch? Es funktioniert perfekt ohne Multiprocessing.

import urllib.request 
import urllib.error 
import multiprocessing 

def findAdmin(URLList): 
    # Loops through links 
    for link in URLList: 
     print (link) 

# Multi-processing worker 
def mp_worker(URLList): 
    findAdmin(URLList) 

# Multi-processing handler 
def mp_handler(URLList): 
    p = multiprocessing.Pool(2) 
    p.map(mp_worker, URLList) 


if __name__ == '__main__': 
    URLList = open('sites.txt','r') 
    mp_handler(URLList) 
    ## When running just findAdmin(URLList), the program works flawlessly. 
    # findAdmin(URLList) 

Also muss ich etwas falsch in Bezug auf Multiprozessing tun. Aber ich kann einfach nicht herausfinden, was es ist. Jede Hilfe wird sehr geschätzt!

+0

'p.map (mp_worker, URLList)' einreicht Jobs an den Pool mit jedem * Elemente * von 'URLList' als Arbeiter Argument, nicht mit dem ganzen' URLList'. Auch das ist keine Liste. – user2357112

+0

Es ist eine Datei und versucht, nach jedem Element zu lesen. Ich verstehe jetzt. Wie könnte ich eine Lösung codieren? – YoshiBMF

Antwort

0

.map() läuft mp_worker auf jeden Eintrag in URLList - die for-Schleife nicht erforderlich ist. Ändern findAdmin zu:

def findAdmin(URLList): 
    print (link) 
+0

Vielen Dank für Ihre Hilfe, aber ich habe es gerade versucht - und das gleiche Problem bekommen. Es scheint nichts zu ändern. – YoshiBMF

+0

Siehe update - die foor-Schleife ist unnötig bei Verwendung von 'map' –

+0

Dies war die Lösung. Vielen Dank für deine Hilfe. – YoshiBMF

Verwandte Themen