2015-05-25 2 views
1

Я хочу создать многопроцессорное приложение. Вот пример:Python time.sleep процесс блокировки

import threading 
import time 
from logs import LOG 


def start_first(): 
    LOG.log("First thread has started") 
    time.sleep(1000) 


def start_second(): 
    LOG.log("second thread has started") 


if __name__ == '__main__': 
    ### call birhtday daemon 
    first_thread = threading.Thread(target=start_first()) 

    ### call billing daemon 
    second_thread = threading.Thread(target=start_second()) 

    ### starting all daemons 
    first_thread.start() 
    second_thread.start() 

В этом коде вторая нить не работает. Думаю, после вызова функции сна внутри first_thread основной процесс спал. Я нашел this post. Но здесь сон использовался с классом. Я получил это (Процесс завершен с кодом выхода 0 ) в результате, когда я запустил ответ. Может ли кто-нибудь объяснить мне, где я совершил ошибку?

  • Я использую Python 3. * на окнах
+0

это на самом деле будет работать, но ваш 'time.sleep (1000)' в методе 1 так долго, что вам нужно подождать 1000 секунд, измените его на 'time.sleep (5)', чтобы увидеть немедленные результаты. – ZdaR

+0

ОК, но он блокирует вторую нить. Почему это так работает? –

ответ

4

При создании нити вы на самом деле вызова функции при попытке установить цель для Thread вместо того, чтобы передать функцию к нему. Это означает, что при попытке создать first_thread вы на самом деле вызываете start_first, который включает в себя очень длинный сон. Я думаю, вы тогда разочарованы тем, что не видите результат второго потока и убиваете его, верно?

Удалите скобки из ваших target= заявлений, и вы получите то, что вы хотите

first_thread = threading.Thread(target=start_first) 
second_thread = threading.Thread(target=start_second) 
first_thread.start() 
second_thread.start() 

будет делать то, что вы пытаетесь

+0

Спасибо, он работает –

+2

Кроме того, если вы хотите создать поток для функции с параметрами, вы можете использовать 'first_thread = threading.Thread (target = start_first, args =())' – ZdaR

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