2017-03-28 4 views
0

Ich habe für eine Antwort auf dieser Website gesucht, aber nicht herausgefunden. Mein Problem ist, dass ich in Python mehrere Dateien von einem Format in ein anderes konvertieren will. Ich möchte 4 Dateien gleichzeitig konvertieren. Ich habe bereits einen Code mit Prozessschlüsselwort aus der Multiprocessing-Bibliothek erstellt, es funktioniert, aber es verwendet mehrere Prozesse, um Dateien nacheinander zu konvertieren, was nicht das ist, was ich will. Ich versuchte, sie gleichzeitig mit diesem Code zu konvertieren:Konvertieren mehrerer Dateien mit Multiprocessing in Python

def convert_all_files (directoryName): 
    directoryName = r'Here I set my directory name C:\...' 
    files2=[] 
    pool=mp.Pool(4) 
    for path, dirs, files in os.walk(directoryName): 
    for f in files: 
     f1=f 
     path1=path   
     files2.append((path1,f1)) 
    for j in range(0, len(files2)): 
    pool.apply_async(convert, (files2[j][0],files2[j][1])) 
    pool.close() 
    pool.join() 

Mein Problem ist, dass der Code ausgeführt wird, aber die Funktion convert nicht ausgeführt wird, und der Code friert an der Linie pool.join() (ich diese Technik verwenden, um eine Menge Zeit zu gewinnen, weil die Konvertierung sehr lang ist, und wenn ich diesen Code ausführe, ist die Konvertierung sofort und funktioniert nicht.)

Ich benutze die oben definierte Funktion in einer anderen Datei. Ich importiere mein Modul und rufe die Funktion auf.

Hat jemand eine Idee? danke

+0

Ihr Code Einzug falsch erscheint, können Sie es bitte überprüfen? – Thom

+0

Hallo! Danke für deine Antwort. Yes, die Code-ID wurde schlecht, wenn ich den Code in diesem Forum einfügen. Ich habe jetzt ein anderes Recht gesetzt. –

Antwort

0

Hier ist eine funktionierende Lösung, ohne die Einschränkungen der 4 Konvertierung zur gleichen Zeit.

def convert_all_files(directoryName): 
    for folder, subs, files in os.walk(directoryName): 
     for filename in files: 
      p = Process(target=convert, args=(folder, filename)) 
      p.start() 

Wenn Sie die Begrenzung benötigen, ist hier eine Lösung, aber ich bin nicht sicher, dass dies das Beste:

def convert_all_files(directoryName): 
    process_count = 0 
    for folder, subs, files in os.walk(directoryName): 
     for filename in files: 
      p = Process(target=convert, args=(folder, filename)) 
      p.start() 

      # Maybe not the better way to handle it 
      process_count = process_count + 1 
      if process_count % 4 == 0: 
       p.join()