2015-03-19 4 views
0

Мой вопрос немного запутан, поэтому я объясню это, сказав, что именно я пытаюсь сделать.Функция завершения цикла при возврате функции - Python

У меня только есть малина Pi и я пишу проект Python с ней. У меня есть функция, которая мгновенно мигает и мигает. Я хочу использовать мигающий свет, чтобы показать статус задания (тот, который может занять некоторое время).

Вот псевдо-код, что я пытаюсь сделать:

def blink(): 
    while 1: 
     ##light on## 
     time.sleep(.5) 
     ##light off## 
     time.sleep(.5) 

longRunningJob() #stop blinking when job returns 

Любые идеи?

+1

Если RPi поддерживает темы, которые были бы на что посмотреть в. – jedwards

ответ

0

Вот решение

import threading 
import time 

RUNNING = False 

def blink(): 
    while RUNNING: 
     ##light on## 
     time.sleep(.5) 
     ##light off## 
     time.sleep(.5) 

t = threading.Thread(target=blink) 
RUNNING = True 
t.start() 
longRunningJob() #stop blinking when job returns 
RUNNING = False 
1

Вы можете использовать класс передать переменную остановки и закончить нить вроде этого:

import time 
from threading import Thread 


class Blink(Thread): 
    def __init__(self,starting_variable): 
     Thread.__init__(self) 
     print("starting variable: %s"%(starting_variable)) 
     self.stop=False 

    def Stop(self): 
     self.stop = True 

    def blink(self): 
     print("light on") 
     ##light on## 
     time.sleep(.5) 
     print("light off") 
     ##light off## 
     time.sleep(.5) 

    def run(self): 
     while not self.stop: 
      self.blink() 
     print("exiting loop ...") 


def longRunningJob(): 
    for sleep_delay in range(5): 
     print("in longRunningJob with sleep: %s"%(sleep_delay)) 
     time.sleep(sleep_delay) 


blink=Blink("something") 
blink.start() 

longRunningJob() 

blink.Stop() 
print("END")