Python。烧瓶。点击后获取列表[重复]

Posted

技术标签:

【中文标题】Python。烧瓶。点击后获取列表[重复]【英文标题】:Python. Flask. Get list after click [duplicate] 【发布时间】:2021-12-21 01:32:17 【问题描述】:

我有一个在进程中运行函数的简单代码。此函数将数字附加到列表中。在我的代码版本中,我得到一个空列表。点击停止按钮后如何获取此列表?

from multiprocessing import Process
from flask import Flask

app = Flask(__name__)

logs = []

def test():
    for i in range(100):
        logs.append(i)
        time.sleep(1)


@app.route('/', methods=['POST', 'GET'])
def main():

    global p

    if request.method == 'POST':

        index = request.form['index']

        if index == 'start':

            p = Process(target = test)
            p.start()

        if index == 'stop':

            print(logs)
            p.kill()

        return redirect(url_for('main'))

    return render_template('index.html')

app.run(debug=True)

【问题讨论】:

***.com/a/11215750 这能回答你的问题吗? Globals variables and Python multiprocessing 【参考方案1】:

你选择了错误的方式。首先,您错过了,不仅只有一个用户会使用您的网站,所以即使它会起作用,他们也会看到一次计数的结果。

所以,我是否建议在这里,例如,使用 DB,当用户第一次加载页面时为每个特定用户创建一个带有时间戳的记录,一旦用户按下按钮,找出现在和记录时间之间的差异。

【讨论】:

只有一个用户【参考方案2】:

我打赌你这会奏效的!

from threading import Thread
from flask import Flask

app = Flask(__name__)

logs = []

stop_thread = False

def test():
    for i in range(100):
        if stop_thread:
            return
        logs.append(i)
        time.sleep(1)


@app.route('/', methods=['POST', 'GET'])
def main():

    global stop_thread

    if request.method == 'POST':

        index = request.form['index']

        if index == 'start':

            t = Thread(target = test)
            t.start()

        if index == 'stop':

            print(logs)
            stop_thread = True;

        return redirect(url_for('main'))

    return render_template('index.html')

app.run(debug=True)

【讨论】:

线程不适合,不能作为进程杀死 是的,我只是想展示线程和进程访问全局变量的方式之间的区别

以上是关于Python。烧瓶。点击后获取列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 python 列表传递给烧瓶视图不起作用

如何将烧瓶表单提交到列表? [复制]

如何在android中获取主屏幕小部件列表项的点击事件[重复]

使用Python以相同的顺序获取列表的所有子列表[重复]

python怎么获取list的某个元素的位置

获取python函数中的参数名称列表[重复]