2017-04-18 4 views
1

Ich versuche herauszufinden, warum Multi-Processing nicht funktioniert. Ich habe schon seit ein paar Tagen gekämpft, weiß .. kann jemand einen Blick darauf werfen und sehen, was ich falsch mache.Python Multiprocessing Pool funktioniert nicht

Ich bekomme keinen Fehler auf dem Skript. Es endet so, als würde es nie die Funktion ausführen, die ich im Pool definiert habe. Ich habe sogar einen gefälschten Funktionsnamen eingegeben, um zu sehen, ob es einen Fehler beim Versuch gibt, es auszuführen, und es nicht einmal zu diesem Punkt kommt. Irgendwelche Gedanken ??

Das Skript funktioniert, wenn ich Multiprocessing nicht verwende, nur um das Skript schneller zu machen. Ich überprüfe 7300 Links für Antwortcodes. Danke im Voraus.

def check_links(linklist): 
 
    returnList = [] 
 
    for links in linklist: 
 
     r = requests.get(links) 
 
     rc = r.status_code 
 
     strRc = str(rc) 
 
     result = links+' '+strRc 
 
     returnList.append(result) 
 
    yield returnList 
 

 
def main(): 
 
    pool = multiprocessing.Pool(4) 
 
    results = pool.map(check_links, MasterListNoDupes) 
 
    
 
    pool.close() 
 
    pool.join() 
 
    
 
    for result in results: 
 
     print(result) 
 
     
 
if __name__ == ' __main__': 
 
    main()

+0

Warum 'Sie yield' wenn konnten Sie n' return'ed? Du konstruierst trotzdem die ganze Liste auf einmal. Welche Ausgabe erhalten Sie? – ForceBru

+0

'if __name__ == '__main __':', Ein zusätzliches Leerzeichen ist in '__main__' enthalten. clear it – Arun

+0

Ich lege es bei der Rückkehr zurück. Ich habe das als einen Schritt zur Fehlerbehebung versucht ... –

Antwort

2

Wenn Ihr Code genau so, wie Sie es klebten, dann zum Glück ist die Lösung einfach- wenn man sich die if Anweisung unten unten schaut, haben Sie ein Leerzeichen vor in dem String, sollte '__main__' lesen (es liest ' __main__').

Also, nur diesen Platz entfernen und Sie können mit Ihrer Codierung weitermachen!

Ich habe Ihre Python-Requests nicht getestet, da ich keine Liste von URLs usw. habe, ich habe nur eine Dummy-Methode geschrieben, die für eine zufällige Zeit schläft und scheinbar wie erwartet funktioniert.

+0

Thnx für Ihre Hilfe. Ich habe dein Skript benutzt und meine Liste wieder eingefügt und es hat funktioniert. Danke .. Ich habe es so viele Möglichkeiten ausprobiert die letzten 2 Tage funktioniert es jetzt. Vielen Dank. –

0

Try this:

import multiprocessing 
import requests 
def check_links(links): 
    returnList = [] 
    print links 
    r = requests.get(links) 
    rc = r.status_code 
    strRc = str(rc) 
    result = links+' '+strRc 
    return result 

def main(): 
    pool = multiprocessing.Pool(4) 
    a = ['http://stackoverflow.com','https://www.google.co.in'] 
    results = pool.map(check_links, a) 

    pool.close() 
    pool.join() 

    for result in results: 
     print(result) 

if __name__ == '__main__': 
    main() 
Verwandte Themen