2015-01-25 5 views
0

문제는 다음과 같습니다. 개별 스레드를 사용하여 숫자 쌍을 추가하는 프로그램을 만들고 싶습니다. 이 코드입니다 :빈 공간을 인쇄하는 스레드

import threading 
from queue import Queue 

print_lock = threading.Lock() 
q = Queue() 
numbers = [[235465645, 4345464565], [52546546546, 433453435234],  [1397675464, 5321453657], [980875673, 831345465], [120938234, 289137856], [93249823837, 32874982837]] 

def addition(pair): 
    num1 = pair[1] 
    num2 = pair[2] 
    total = num1 + num2 

    with print_lock: 
     print(num1, '+', num2, ':', total) 

def threader(): 
    while True: 
     pair = numbers.pop(0) 
     calculator = q.get() 
     addition(pair) 
     q.task_done() 

for i in range(len(numbers)): 
    t = threading.Thread(target = threader) 
    t.daemon = True 
    t.start() 

for i in range(len(numbers)): 
    q.put(i) 

q.join() 

하지만이 프로그램을 실행할 때, 내가 가진 전부는 두 개의 빈 줄입니다. 나는 그 문제가 뭔지 모른다. 그 어떤 식 으로든 도움이된다면 3.4 버전을 사용하고 있습니다.

모든 도움을 주시면 감사하겠습니다. 는

답변

1

깨진 색인에 ..., Muathasim 모하메드 P 감사 :

def addition(pair): 
    num1 = pair[1] 
    num2 = pair[2] 
    (etc) 

파이썬 인덱스를 0에서 len(pair) 2 인으로, pair[2]IndexError와 스레드를 죽이는 있도록. 최저 :

def addition(pair): 
    num1, num2 = pair 
    (etc) 

그래서 당신은 심지어 파이썬 색인에 ​​대한 오히려 중요한 세부 사항을 기억하지 않아도 - 당신은 떨어져 가고, 두 개의 스칼라로 2 항목의 순서를 풀고 -)

!
관련 문제