在Flask / Python中每秒显示截断字符串的一部分

时间:2014-01-31 01:37:27

标签: python multithreading flask

我正在Flask中构建一个应用程序,但我对它很新。我想做的是从外部.txt文件中取一个字符串,从中返回n个数字,等待一段时间,然后返回n + 1个数字,再等一秒,然后是n + 2个数字等。< / p>

我可以在打印到终端时使其工作,但无法让它在视图中实际返回。不知道我哪里出错,任何帮助都会非常感激。

目前,我正在获取一个挂页或“查看功能没有返回响应”,我没有想法

@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 `

1 个答案:

答案 0 :(得分: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)