Coder Social home page Coder Social logo

Comments (2)

NixBiks avatar NixBiks commented on June 22, 2024 1

Thanks for the feedback. It makes sense!

from uvicorn-gunicorn-docker.

tiangolo avatar tiangolo commented on June 22, 2024

So, if you have several def functions that only wait there, they will block the thread they are in. And if you will still have a limited amount of threads, and if all of them are handling a request that is blocking with a sleep, then that will end up blocking the concurrency.

If you use async and asyncio.sleep, that "sleeps", but doesn't block and lets the rest of the code continue executing, without holding the resources. Because it is not really using the CPU, just waiting for something else.

But if you are doing something that is CPU intensive, like training a model, then you should probably still use def so that it runs in threadpool and doesn't block the rest, but if you run several of those at the same time, there will be a point where all your CPUs are used in full. And then it doesn't matter which tricks you use, your machine won't be able to handle more concurrency, just because all the CPU available is used.

Now, if that's the case and you are using something that is CPU intensive, if your use case is simple enough, and you expect a small concurrency, let's say, it's an internal tool used only by a small internal team, then it might be OK to just do it all internally in your FastAPI app.

But for anything bigger than that, you will probably end up needing to have more machines dedicating to training the models (or whatever is the slow resource-intensive task). And then your API would just receive requests and report the status of the training of those tasks, but the API code wouldn't be in charge of actually training the models.

Then, the way you would coordinate those different machines (or at least separate worker processes) would be with a tool like Celery or ARQ.

If you check the project generators, those have Celery setup and included by default.

If you want to try something new, I think ARQ is probably a very good option.

from uvicorn-gunicorn-docker.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.