2015-01-25 2 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, если это помогает.

Я бы очень признателен за любую помощь. Спасибо, Muathasim Mohamed P

ответ

1

Разбитое индексирование ...:

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

индексов Python от 0, так и с len(pair) быть 2, pair[2] убивает нить с IndexError. Лучше всего:

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

так что вам даже не придется вспомнить довольно важную деталь о индексировании Python - просто распаковать последовательность 2-х пунктов в двух скаляров, и, ступай -)

!
Смежные вопросы