2016-07-19 1 views
7

Я использую небольшое приложение для Python под названием Pythonista, которое позволяет мне менять цвет текста на вещи каждые несколько секунд. Вот пример того, как я пытался делать это в бесконечном цикле;Python: Сделайте что-нибудь, а затем спать, повторите

while True: 
    v['example'].text_color = 'red' 
    time.sleep(0.5) 
    v['example'].text_color = 'blue' 
    time.sleep(0.5) 
    # and so on.. 

Проблема здесь в том, что это замораживает мою программу, потому что Python продолжает спать снова и снова, и я никогда не видел каких-либо изменений. Есть ли способ увидеть изменение (текст меняется на красный/синий/и т. Д.), А затем выполнить следующую задачу x через некоторое время и т. Д.?

+12

Вам необходимо изучить * многопоточность *. Все задачи выполняются в одном потоке, включая графику. Когда вы говорите 'sleep', тогда ** все ** спит. То, что вы хотите сделать, это поместить ваш цикл в отдельный поток с асинхронными обратными вызовами, чтобы обеспечить непрерывное выполнение без прерывания потока остальной части программы. –

+0

@PierceDarragh Будет делать, спасибо –

+0

Нет проблем! Есть много учебников онлайн и много сообщений здесь о SO. Удачи! :) –

ответ

2

Вам нужно будет создать новый поток, который запускает ваш код. Поместите свой код в свой собственный метод some_function(), а затем начните новый поток:

thread = Thread(target = some_function) 
thread.start()