Wie kann ich die Anzahl der gleichzeitigen Threads in Python begrenzen?Wie die Anzahl der gleichzeitigen Threads in Python zu begrenzen?
Zum Beispiel habe ich ein Verzeichnis mit vielen Dateien, und ich möchte alle von ihnen, aber nur 4 gleichzeitig parallel verarbeiten.
Hier ist, was ich bisher:
def process_file(fname):
# open file and do something
def process_file_thread(queue, fname):
queue.put(process_file(fname))
def process_all_files(d):
files=glob.glob(d + '/*')
q=Queue.Queue()
for fname in files:
t=threading.Thread(target=process_file_thread, args=(q, fname))
t.start()
q.join()
def main():
process_all_files('.')
# Do something after all files have been processed
Wie kann ich den Code ändern, so dass nur 4 Threads gleichzeitig ausgeführt werden?
Beachten Sie, dass ich warten möchte, bis alle Dateien verarbeitet wurden, und fahre dann mit den verarbeiteten Dateien fort.
Haben Sie versucht, [Multi-Prozess-] (http://docs.python.org/2/library/multiprocessing.html # module-multiprocessing) Pools? Auf Python 3 können Sie auch [futures] (http://docs.python.org/dev/library/concurrent.futures.html) verwenden. – javex
Sie können ['futures'] (https://pypi.python.org/pypi/futures) auch in Python 2 verwenden, Sie müssen nur den Backport installieren. – abarnert
concurrent.futures ist in der Tat der beste Weg, es zu tun – JBernardo