2016-02-20 1 views
1

Я новичок в потоках и выполняю очень простой пример потока. Ниже приводится программа, которую я пытаюсь выполнить:Получение AttributeError: объект 'int' не имеет атрибута 'start' при попытке запустить базовую программу потоков

import os 
import thread 
import threading 

def main(): 
    t1=thread.start_new_thread(prints,(3,)) 
    t2=thread.start_new_thread(prints,(5,)) 
    t1.start() 
    t2.start() 
    #t1.join() 
    #t2.join() 

def prints(i): 
    while(i>0): 
     print "i="+str(i)+"\n" 
     i=i-1 

if __name__=='__main__': 
    main() 

Когда я пытаюсь выполнить, я получаю следующее сообщение об ошибке (AttributeError: «INT» объект не имеет атрибута «старт»):

Traceback (most recent call last): 
i=3 
    File "thread_1.py", line 19, in <module> 

    i=2 

i=1 
main() 

i=5 

i=4 

i=3 

i=2 

i=1 

    File "thread_1.py", line 8, in main 
    t1.start() 
AttributeError: 'int' object has no attribute 'start' 

Как видно из вывода, оба выполняются, но не так, как я ожидал (это чередующиеся отпечатки или что-то в этом роде). Это кажется более последовательным. Как изменить/исправить мою программу, чтобы получить ожидаемый результат?

ответ

2

Из документов из thread.start_new_thread (полужирных шахтных):

Start a new thread and return its identifier.

Таким образом, вы на самом деле вызов .start() на int, который, очевидно, не допускается. Но вы являются фактически выполняет функцию prints() как вы заметили:

The thread executes the function function with the argument list args (which must be a tuple).

This SO вопрос может решить некоторые вопросы, касающиеся создания и использования потоков в Python.

+4

расширить на этом, если вы хотите вызвать начало() в явном виде, использовать т = threading.Thread (Fn, арг, kwargs) t.start() –

+0

Спасибо @ASmallShellScript – Idos

+0

Okay. Итак, по вашему мнению, если я верну свой идентификатор, он выполнит штраф? Было бы полезно, если бы вы могли наброситься на это. Кроме того, когда я комментирую t1.start() и t2.start(), ошибка исчезла, но я получаю только i = 3 в качестве печати. Понятно, потому что нить не началась правильно? –

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