如何让Python在一分钟后停止运行的dash服务器?

jtw3ybtb  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(165)

在我的本地机器上,我使用plotly和Dash。我从命令行运行python文件(Windows Powershell或cmd.exe,但两者的行为相同),并希望

  • 让它在一分钟左右后停止dash服务器,或者
  • 在输入(“问题”)上键入“是”后让它停止。

虽然输出很好,但问题是,它甚至不会到达app.run_server(...)之后的任何一行,除非我在shell上键入Ctrl-C让它退出。
我想像 * app.run_server(debug=True, runtime = 360)应该存在,但广泛的谷歌搜索没有帮助...
我也试过使用 subprocess,但没有用。我只是不知道如何以及从哪里开始...比如,如何将东西连接到它,甚至在Popen()中插入一个python命令,比如app.run_server(...),作为shell命令,毕竟它不是。
这里是一个最小的工作示例,我应该如何修改它以使其停止?

#testingdash.py
import os
import signal

from dash import Dash, html, dcc

app = Dash(__name__)

app.layout = html.Div([
    dcc.Textarea(
        id='textarea-example',
        value='Lorem ipsum test working example',
        style={'width': '100%', 'height': 300},
    ),
    html.Div(id='textarea-example-output', style={'whiteSpace': 'pre-line'})
])

if __name__ == '__main__':
    app.run_server(debug=True)
    print("Does not even reach this before ctrl-C")
    #quit()
    os.kill(os.getpid(), signal.SIGTERM)
7xzttuei

7xzttuei1#

问题是app.run_server(debug=True)是一个阻塞调用,这意味着它将阻塞后面的任何代码的执行,直到手动停止服务器。
据我所知,你可以在一个单独的线程或进程中运行达世币服务器来实现这一点。也许可以试试这样的东西:

import time
import threading

from dash import Dash, html, dcc

app = Dash(__name__)

app.layout = html.Div([
    dcc.Textarea(
        id='textarea-example',
        value='Lorem ipsum test working example',
        style={'width': '100%', 'height': 300},
    ),
    html.Div(id='textarea-example-output', style={'whiteSpace': 'pre-line'})
])

def run_dash():
    app.run_server(debug=True)

if __name__ == '__main__':
    # Run Dash in a separate thread
    dash_thread = threading.Thread(target=run_dash)
    dash_thread.start()

    # Run for 60 seconds
    time.sleep(60)

    # Stop the Dash server by terminating the entire program
    print("Stopping Dash server...")
    #lol, you sure you know what you're doing?
    os.kill(os.getpid(), signal.SIGTERM)

相关问题