2016-09-27 5 views
0

각각 다른 10 개의 쓰레드를 실행하는 5 개의 쓰레드를 실행하려고합니다. 뭔가 같이 :파이썬 큐 이중 쓰레드

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은 Queue의 복사본 만 사용하고 첫 번째 줄에서 열거를 시작할 수 있습니까? 공통 소스에서 오는 자체 대기열을 사용하는 방법

+0

나는'대기열 '요점, 왜 필요한거야? 프로세스 꼬리가 있다면 동시에 여러 위협을 실행하는 방법? – 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)