2014-01-31 4 views
0

Я создаю приложение в Flask, но я к нему очень новичок. То, что я хотел бы сделать, это взять строку из внешнего .txt-файла, вернуть n цифр из него, подождать промежуток времени, затем вернуть n + 1 цифру, подождать еще секунду, затем n + 2 цифры и т. Д.Показывает часть усеченной строки каждую секунду в Flask/Python

Я могу заставить это работать при печати на терминал, но не может заставить его работать, фактически возвращаясь в виде. Не знаю, где я ошибаюсь, любая помощь будет очень оценена.

На данный момент я получаю либо страницу подвесную или «Вид функции не возвращает ответ» и я из идей

@app.route('/') 
@app.route('/index') 

def index(): 


    class RepeatEvery(threading.Thread): 
       def __init__(self, interval, func, *args, **kwargs): 
       threading.Thread.__init__(self) 
       self.interval = interval # seconds between calls 
       self.func = func   # function to call 
       self.args = args   # optional positional argument(s) for call 
       self.kwargs = kwargs  # optional keyword argument(s) for call 
       self.runable = True 
      def run(self): 
       while self.runable: 
         self.func(*self.args, **self.kwargs) 
         time.sleep(self.interval) 
      def stop(self): 
       self.runable = False 

    counter = 0 

    while counter != 5: 
     number = str(counter) 
     counter += 1 
     thread = RepeatEvery(1, truncate, number) 
     thread.start() 
     thread.join(1) 
     thread.stop() 


def truncate(num): 
    with open(os.path.join(APP_STATIC, 'file.txt')) as f: 
     data = f.read() 
     truncated = data[:num] 
     return truncated ` 

ответ

2

Вы можете передавать данные обратно клиенту using a generator :

from flask import Response 

@app.route('/') 
def index(): 
    data = "" 
    with open(os.path.join(APP_STATIC, 'file.txt')) as f: 
     data = f.read() 

    gen = (data[:num] for num in range(1, 6)) 

    return Response(gen, mimetype="text/plain") 

Зная это, можно затем добавить паузы в свой генератор:

from time import sleep 

def gen(data): 
    for num in range(1, 6): 
     yield data[:num] 
     sleep(1) 
Смежные вопросы