2016-08-07 15 views
0

Mein Multi-Threading-Skript Erhöhung um diesen Fehler zu töten:Wie alt Threads in Python

thread.error : can't start new thread 

, wenn es erreicht 460 Themen:

threading.active_count() = 460 

ich die alten Threads übernehmen hält stapeln, da die Skript hat sie nicht getötet. Dies ist mein Code:

import threading 
import Queue 
import time 
import os 
import csv 


def main(worker): 
    #Do Work 
    print worker 
    return 

def threader(): 
    while True: 
     worker = q.get() 
     main(worker) 
     q.task_done()   

def main_threader(workers): 
    global q 
    global city 
    q = Queue.Queue() 
    for x in range(20): 
     t = threading.Thread(target=threader) 
     t.daemon = True 
     print "\n\nthreading.active_count() = " + str(threading.active_count()) + "\n\n" 
     t.start() 
    for worker in workers: 
     q.put(worker) 
    q.join() 

Wie kann ich die alten Threads töten, wenn ihre Arbeit erledigt ist? (Ist die Funktion nicht genug zurück?)

Antwort

1

Python threading API hat keine Funktion, um einen Thread (nichts wie threading.kill(PID)) zu töten.

Das heißt, Sie sollten selbst einen Thread-Stop-Algorithmus programmieren. Zum Beispiel sollte Ihr Thread irgendwie entscheiden, dass er beendet werden soll (z. B. eine globale Variable prüfen oder prüfen, ob ein Signal gesendet wurde) und einfach return.


Zum Beispiel:

import threading 


nthreads = 7 
you_should_stop = [0 for _ in range(nthreads)] 

def Athread(number): 
    while True: 
     if you_should_stop[number]: 
      print "Thread {} stopping...".format(number) 
      return 
     print "Running..." 

for x in range(nthreads): 
    threading.Thread(target = Athread, args = (x,)).start() 

for x in range(nthreads): 
    you_should_stop[x] = 1 

print "\nStopped all threads!" 
+1

Ich habe die Rückkehr ohne Glück gegeben. threading.active_count() geht weiter. –