2017-01-31 1 views
0

Я создал две простые функции, чтобы увидеть, как работают потоки. Я хочу заполнить список, пока поток жив. Но возвращенный список пуст.Python - список не заселен, пока поток жив

def test_function(): 
    x=1 
    while x<=100000: 
     x=x+1 


def thread_function(funct): 
    t = threading.Thread(target=funct) 
    t.start() 
    l = [] 
    while t.isAlive(): 
     l.append(datetime.datetime.now()) 
    return l 

print(thread_function(test_function())) #returns [] 
+0

Что делать, если прогоны нить _and finishes_ немедленно, прежде чем войти в 't.isAlive()' цикл? У вас нет способа узнать, произошло ли это или проверить цикл, созданный внутри потока. – Useless

+0

Кстати, не называйте свой список 'list'. Это имя типа. – khelwood

+0

[kelwood] (http://stackoverflow.com/users/3890632/khelwood) Спасибо за наблюдение. Я редактировал свой код. –

ответ

1

Это потому, что вы выполнение test_function в основном потоке, и передать None к вашему thread_function вместо самой функции.

print(thread_function(test_function())) 

должен быть

print(thread_function(test_function)) 
+0

. Я отметил этот ответ как принятый. [omri_saadon] (http://stackoverflow.com/users/3417069/omri-saadon) имеет такое же решение, но [Jean-François Fabre] (http://stackoverflow.com/users/6451573/jean-fran%c3% a7ois-fabre) ответил первым. Спасибо за вашу помощь –

1

Вам необходимо пройти функцию test_function вместо возвращаемого значения этой функции test_function(), что нет.

Итак, в основном функция, которую вы даете в качестве цели для потока, - None.

Изменить это:

print(thread_function(test_function())) 

To:

print(thread_function(test_function)) 
Смежные вопросы