2016-09-27 3 views
0

Ich versuche, 5 Threads zu laufen, die jeweils weitere 10 Threads ausführen. Etwas wie:Python Queue Doppelthreading

dictionaryFileQueue = Queue.Queue() 
with open(dictionaryFile, "r") as wordsToCheck: 
    for word in wordsToCheck: 
     dictionaryFileQueue.put(word) 

for wordToScan in wordsList: 
#...some code 

    dictionaryFileOpen = dictionaryFileQueue 

    for i in range(10): 
     i_thread = Thread(target=words_Scan_Start, args=(dictionaryFileOpen, wordToScan)) 
     threads.append(i_thread) 

for thread in threads: 
    for wordThread in thread: 
     wordThread.start() 

def words_Scan_Start(dictionaryFile, wordToScan): 
    # Here I need to make an action with "wordToScan". 
    # But in 10 threads "range(10)" and use the same "dictionaryFileOpen" for every thread. 
    #............... 

BUT, ich brauche, dass jeder wordToSacn Thread seine eigenen dictionaryFileQueue verwendet, die stammt aus gemeinsamer Quelle (dictionaryFileQueue auf dem ersten Linie). Weil, wenn ich alle Threads starte, alle nur eine Warteschlange verwenden. Aber ich brauche eine Kopie der Warteschlange für jeden wordToScan. Wie kann ich jedes wordToScan nur Kopie der Warteschlange verwenden und seine Aufzählung von der ersten Zeile beginnen? Wie man es seine eigene Warteschlange verwenden lässt, die von der allgemeinen Quelle kommt?

+0

Ich vermisse 'Warteschlange 'Punkt, warum brauchst du? Wenn Sie Prozessschwanz haben, wie mehrere Bedrohungen gleichzeitig ausgeführt werden? – dsgdfg

+0

Warteschlange ist analog für 'dictionaryFile.readline()'. Ich brauche es nur, damit jeder Thread nur die nächste Zeile der Datei liest, wenn ein Thread diese Zeile bereits gelesen hat. – passwd

+0

Trennen Sie jede Warteschlange, aber wie werden Jobs in jeden Thread aufgeteilt? Brauchen Sie Thread-Manager für welchen Erfolg oder fehlgeschlagen und Daten zurückgegeben! Sie können keinen Apfel zeichnen, ohne zuvor einen Baum gezeichnet zu haben. – dsgdfg

Antwort

0

Es stellt sich heraus, dass das so einfach war. müssen Sie einfach diesen Teil einzufügen:

Innerhalb dieses Teils:

for wordToScan in wordsList: 
#...some code 

    # INSTEAD OF THIS LINE BELOW 
    #dictionaryFileOpen = dictionaryFileQueue 

Und diesen Code am Anfang des Skripts hinzu:

openDictionaryFile = open(dictionaryFile, "r") 
linesOfDictionary = openDictionaryFile.readlines() 
openDictionaryFile.close() 

statt:

#dictionaryFileQueue = Queue.Queue() 
#with open(dictionaryFile, "r") as wordsToCheck: 
    #for word in wordsToCheck: 
     #dictionaryFileQueue.put(word)