使用Flask应用程序作为非网络相关程序的接口

2024-04-18 21:44:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想这是一个关于最佳实践的问题。在

我对web开发、web框架等有点陌生。我计划用Flask制作一个网站。我很想做一个应用程序,它是一个命令行程序的接口。例如,我有一个Python命令行程序,它接受一个单词并打印出该单词的所有有效anagram。这个逻辑在我的Flask应用程序中的位置/方式?会是这样吗?在

from anagram import compute_all_anagrams

@app.route("/result?word=<word>") # I'm not sure if this is correct usage of route
def result_page(word):
    result = compute_all_anagrams(word) # returns a list of anagrams
    render_template("result.html", result=result)

在哪里结果.html是显示结果列表的模板吗?在

当然,这里我不会让我的anagram程序打印任何内容,而是以字符串数组的形式返回它。在

另外,如果compute_all_anagrams需要一段时间——比如说10秒呢?情况会如何改变?在

谢谢


Tags: of命令行程序web应用程序flaskhtmlresult
1条回答
网友
1楼 · 发布于 2024-04-18 21:44:05

是的,你知道了。在

如果要花很长时间来计算,可以考虑使用ajax或类似的客户端“rendering…”消息。因此,您将产生一个后台作业-最简单的方法是实际运行一个外部进程-然后每次“它完成了吗?”请求进来后,检查它是否仍在运行,如果没有,则返回结果(比如从一个文件中),如果它仍在运行,那么就告诉客户端。在

默认情况下,flask内置开发Web服务器会在您在前台进行长时间的操作时阻塞,这对于多用户的工作是不利的,但对于单用户“我只想从我的手机上控制一些任务”来说是可以的。这就是为什么有许多其他服务器可以插入flask或任何其他普通pythonweb框架。这些服务器称为WSGI服务器。一个好的“default”是“waitress”http://waitress.readthedocs.org/en/latest/,这是一个纯python服务器,因此不需要任何额外的lib或任何东西。同样好的还有gevent WSGI服务器,gunicorn,uwsgi。。。但对于小型的单用户(或少数)应用程序来说,这并不重要。在

如果你把东西放在互联网上,这样公众就可以访问它们,那么通常最好把你的flask应用隐藏在nginx(或类似产品)后面,作为一个“反向代理”,这样可以限制请求的数量,而不必惊慌失措,而且通常只会保持事情的正常。在

但无论如何,对于一个长时间的计算任务来说,10秒的响应时间是可以的。如果事情要花一分钟以上的时间,那么我想说你当然应该研究这些任务的某种外部过程,并对其进行监控。在

你需要注意的是,其他人不能像这样开始工作-很容易让你的计算机被许多人拒绝,所有的工作都需要很长的时间来计算。你应该输入密码(至少!)对此类服务的保护。在

你使用的路由是错误的,尽管-/result/<word>已经足够了。之后有什么事吗?实际上不是路由的一部分-它是一个请求参数。你可以通过烧瓶要求对象(检查文档)。在

玩得开心!:-)

相关问题 更多 >