【问题标题】:Python. Flask. Get list after click [duplicate]Python。烧瓶。点击后获取列表[重复]
【发布时间】:2023-03-30 16:33:01
【问题描述】:

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

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)

【问题讨论】:

标签: python flask 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)

【讨论】:

  • 线程不适合,不能作为进程杀死
  • 是的,我只是想展示线程和进程访问全局变量的方式之间的区别
猜你喜欢
  • 2018-07-09
  • 1970-01-01
  • 2017-08-24
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 2019-09-29
相关资源
最近更新 更多