作为动态网站托管应用
介绍
Flet 实现了 FastAPI 应用程序来将您的应用程序运行为动态网站。
默认情况下,它使用 Uvicorn 网络服务器来运行应用程序,但也可以使用任何兼容 ASGI 的服务器。
同步和异步处理程序
在 Flet web 应用中,您可以在同一个应用中混合使用同步和异步方法。
例如,您可以编写如下应用:
import flet as ft
import time
import asyncio
def main(page: ft.Page):
def handler(e):
time.sleep(3)
page.add(ft.Text("Handler clicked"))
async def handler_async(e):
await asyncio.sleep(3)
page.add(ft.Text("Async handler clicked"))
page.add(
ft.ElevatedButton("Call handler", on_click=handler),
ft.ElevatedButton("Call async handler", on_click=handler_async)
)
ft.app(main)
在这个示例中,点击一个按钮由“阻塞”处理程序处理,而点击另一个按钮调用异步处理程序。第一个处理程序在 threading.Thread
中运行,而第二个处理程序作为 asyncio.Task
运行。
在 web 应用中,使用线程是应用扩展性的一个考虑因素,因为线程是有限资源。通常使用线程池,但随着用户数量的增加,它可能成为瓶颈。
无论如何,如果您的应用主要进行 I/O 操作(数据库、web API)并且/或者您能够使用支持异步的库,我们建议实现异步处理程序。
查看 FastAPI 关于 async/await 的文章以更好地了解并发性和并行性的区别。
本地运行应用
使用 --web
(-w
) 选项启动 Flet 应用作为 web 应用:
flet run --web app.py
将打开一个新的浏览器窗口/标签页,应用将使用随机 TCP 端口。
要在固定端口上运行,请使用 --port
(-p
) 选项:
flet run --web --port 8000 app.py