2016-07-26 7 views
1
zu unterbrechen

Ich bin auf einem Python-Code arbeiten, einen Blog zu kratzen, die ein bisschen wie folgt aussieht:Threads halten an BeautifulSoup Befehl - nicht in der Lage

def main(): 
    thread=threading.Thread(target=blogthread,args=(path,username)) 
    thread.start() 
    threads.append(thread) 
    ... 

def blogthread(path,username,steem): 
    s=site_scraper.userposts(username) 
    ... 

def userposts(username): 
    f = urllib.request.urlopen(url,timeout=200) 
    soup = BeautifulSoup(f,'html.parser') 
    ... 

Wenn ich userposts (Benutzername) direkt anrufen, es funktioniert einfach fein. Wenn Threads involviert sind, endet mein main(), aber jeder andere Thread bleibt genau in der "Beautifulsoup" -Linie stecken. Es wird nie fortgesetzt, auch wenn der Haupt-Thread fertig ist.

Durch Spielen mit dem Code, habe ich festgestellt, dass, wenn ich einen Fehler am Ende des Haupt-Thread (wie eine undefinierte Variable) hinzufügen, bekomme ich eine Fehlermeldung, aber meine Threads beginnen plötzlich wieder aufzunehmen und gib die gewünschten Ergebnisse aus.

Ich bin wirklich verwirrt, danke für Ihre Hilfe.

Antwort

-1

Der Haupt-Thread endet, aber die anderen Threads laufen noch. Ich weiß nicht, warum sie in der BeautifulSoup-Linie stecken bleiben. Sie können es jedoch beheben, indem Sie das Programm beenden, wenn der Hauptthread beendet ist. Tun Sie einfach einen sys.exit() Befehl am Ende des Hauptthreads.