Note |
---|
There's a small detail about names to have in mind. |
The word "server" is commonly used to refer to both the remote/cloud computer (the physical or virtual machine) and also the program that is running on that machine (e.g. Uvicorn).
Just have that in mind when you read "server" in general, it could refer to one of those two things.
When referring to the remote machine, it's common to call it server, but also machine, VM (virtual machine), node. Those all refer to some type of remote machine, normally running Linux, where you run programs.
You can install an ASGI compatible server with:
Code Block | ||
---|---|---|
| ||
pip install "uvicorn[standard]" |
Tip |
---|
By adding the That including |
Code Block | ||
---|---|---|
| ||
pip install hypercorn |
...or any other ASGI server.
You can then run your application the same way you have done in the tutorials, but without the --reload
option, e.g.:
Code Block | ||
---|---|---|
| ||
$ uvicorn app.webapp:app --host 0.0.0.0 --port 8085 INFO: Uvicorn running on http://0.0.0.0:8085 (Press CTRL+C to quit) |
Code Block | ||
---|---|---|
| ||
$ hypercorn app.webapp:app --bind 0.0.0.0:8085 Running on 0.0.0.0:8085 over http (CTRL + C to quit) |
Warning | ||
---|---|---|
| ||
Remember to remove the The It helps a lot during development, but you shouldn't use it in production. |
Starlette and FastAPI (which Search API is based on) are based on AnyIO, which makes them compatible with both Python's standard library asyncio and Trio.
Nevertheless, Uvicorn is currently only compatible with asyncio, and it normally uses uvloop
, the high-performance drop-in replacement for asyncio
.
But if you want to directly use Trio, then you can use Hypercorn as it supports it.
First you need to install Hypercorn with Trio support:
Code Block | ||
---|---|---|
| ||
pip install "hypercorn[trio]" |
Then you can pass the command line option --worker-class
with the value trio
:
Code Block | ||
---|---|---|
| ||
hypercorn app.webapp:app --worker-class trio |
And that will start Hypercorn with your app using Trio as the backend.
Now you can use Trio internally in your app. Or even better, you can use AnyIO, to keep your code compatible with both Trio and asyncio.
These examples run the server program (e.g Uvicorn), starting a single process, listening on all the IPs (0.0.0.0
) on a predefined port (e.g. 80
).
This is the basic idea. But you will probably want to take care of some additional things, like:
Info |
---|
For more detail on deployment concepts please visit the official FastAPI documentation |