2016-09-27 3 views
0

Я пытаюсь запустить 5 потоков, которые запускают еще 10 потоков каждый. Что-то вроде:Python Queue double threading

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. 
    #............... 

НО, мне нужно, чтобы каждый wordToSacn нить использует свой собственный dictionaryFileQueue, который приходит от общего источника (dictionaryFileQueue на первой линии). Потому что, когда я запускаю все потоки, все они используют только одну очередь. Но мне нужна копия очереди за каждые wordToScan. Как я могу заставить каждый wordToScan использовать только копию очереди и начать ее перечисление с первой строки? Как заставить его использовать свою собственную очередь, которая поступает из общего источника?

+0

Я пропустил очередь 'point, зачем вам нужно? если у вас есть хвост процесса, как одновременно запускать несколько угроз? – dsgdfg

+0

Очередь является аналоговой для 'dictionaryFile.readline()'. Мне нужно, чтобы каждый поток читал только следующую строку файла, если какой-то поток уже прочитал эту строку. – passwd

+0

Отделить каждую очередь, но как разделить задания на каждый поток? Нужно создать диспетчер потоков, для которого успех или неудача и возвращаемые данные! Вы не можете рисовать яблоко без рисования дерева раньше. – dsgdfg

ответ

0

Получается, это было так легко сделать. Просто нужно вставить эту часть:

Внутри этой части:

for wordToScan in wordsList: 
#...some code 

    # INSTEAD OF THIS LINE BELOW 
    #dictionaryFileOpen = dictionaryFileQueue 

И добавьте этот код в начале сценария:

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

вместо:

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