Great content brother Quick Modification: sync router is Concurrency not Parallelism. In python parallelism is achieved only by multiprocessing
@vladhaidukkk-learning8 ай бұрын
Great video, but I think it’s important to mention that multi-threading in Python is not parallel
@bakasenpaidesu7 ай бұрын
Multi processing*
@vladhaidukkk-learning7 ай бұрын
@@bakasenpaidesu Actually you are wrong; multiprocessing is parallel because Python spawns an entirely new process with an entirely new interpreter.
@benshapiro97316 ай бұрын
Multi threading in python is technically also parallel programming whenever a thread releases the GIL, such as during time.sleep or open calls. In those specific instances, there can be two (or more) threads truly executing in parallel in the same python process, because one thread is waiting for the results of a system call, during which time it releases the GIL since reference counts don’t need to be updated, allowing another thread to acquire the GIL and execute a piece of code in parallel.
@benshapiro97316 ай бұрын
On this topic also: check out the beta of. Python 3.13! There is a flag that can be passed when launching python that removes the GIL, allowing truly parallelized execution with just threads. Been playing around with asyncio and concurrent.futures.ThreadPoolExecutor -> noticeable speed up. Shame that c-extension based libraries like numpy are unusable with this setting
@vladhaidukkk-learning6 ай бұрын
@@benshapiro9731 This is called concurrency, not parallelism. Parallelism is when two or more tasks can run simultaneously, using the CPU, without waiting for I/O-bound operations. While the GIL doesn't prevent Python from switching context between threads waiting for I/O-bound operations, this is still considered concurrency, not parallelism.
@AnaskiBaithak9 ай бұрын
Thank you for this, I always wondered the difference between async def and def
@usama57926Ай бұрын
best video on fastapi, straight to the point ❤
@PriyankRupareliya3 ай бұрын
This is very valuable content. New job, starting to work on FastAPI. The whole python paradigm is new for me. This video helped clear one of the most critical concept for me. Thanks brother.
@hardikvegad35086 күн бұрын
What an excellent explanation. Thank you!
@saeed-khan-csАй бұрын
Precisely on point video! I am new to fastapi & I was looking for exactly this information. Kudos!
@clearthinking5441Ай бұрын
Can all blocking operations be made non-blocking with asyncio? You advice is to use def for blocking operations, I am wondering wether it would be better advice to ensure that all operations are non-blocking and use async def always ...?
@codecolliderАй бұрын
You're absolutely right that using only non-blocking operations is ideal, and relying on async def wherever possible is great advice. However, there are cases where blocking operations can't be avoided like when an async version of a library you need doesn't exist, and you're stuck with a synchronous one. It's all about adapting to the tools available!
@sarvesh67852 ай бұрын
Amazing Video brother. You solved my issue.
@joeygibli2 ай бұрын
It would be more clear if you wrote “Hello 1” and “Hello 2”; “Bye 1” and “Bye 2” for the different functions to see which routine the messages are coming from
@정하은-h6s8 ай бұрын
OMG! This is so helpful and a great video. Thank you and please post more videos like this!
@vikranttyagiRN6 ай бұрын
Nice explanation. Concise and to the point.
@sany2k86 ай бұрын
Great explanation, you should create more videos bro...
@valentinmilanesio02Ай бұрын
Great video! I have a question, in the first case, when the second request arrives inmediately, where would be the queue and who is handling that queue?
@codecolliderАй бұрын
The queue is managed by the ASGI server (like Uvicorn). When the second request arrives, it’s held in the server's queue until the event loop is free to process it.
@valentinmilanesio02Ай бұрын
@@codecollider thanks!!
@ishaquenizamani98007 ай бұрын
Thanks for clearing this concept.
@agusprayАй бұрын
What if my endpoint have database process (post data) and blocking i/o for timeout process? what should i choose? Async def or normal def?
@usama57926Ай бұрын
@@aguspray use async querying methods for db that way you can use async endpoint.
@agusprayАй бұрын
@ inside of code, there is also blocking process (while loop), then how to make it asynchronously?
@PyPeak6 ай бұрын
Beautifully explained!
@sticksen6 ай бұрын
My question would be how FastAPI then manages workload when it´s handed over to the worker thread. Because I can only see one worker thread running, at the same time it handles 40 'workloads' concurrently.
@Shane19943226 ай бұрын
Clearly explained!! Thank you
@hyakuheli3 ай бұрын
what happens if the server is created with multiple processes (for multiple cores) with uvicorn main:app --workers 4. The first 4 clients are given a new process? or it can be either a process or another thread if a thread is in a non-blocking task? and what happens when there are more than 4 clients at the same time in this case? the new clients are assigned to threads randomly across the 4 processes?
@lwangacaleb27297 ай бұрын
I need some help, I want to create a fast api endpoint that calls a synchronous function that has a lot of blocking I/0 operations. But I want the endpoint function to run asynchronously so it can accept many requests at the same time. How should I do this, is there an alternative approach?
@Praise-rs4mc7 ай бұрын
The only way to achieve that is to use multi-threading which I advice against.... instead, make the function asynchronous and try to find the non-blocking function for what you want to do...
@Praise-rs4mc7 ай бұрын
Better still, use the run_in_threadpool function from fastapi to run the process in a different thread so that you don't block the event...better than implementing multi threading on your own.
@lwangacaleb27297 ай бұрын
@@Praise-rs4mc thanks alot, I will give it a try.
@fhuadbalogun29973 ай бұрын
Thank you very much for this.
@rainbowrunner11364 ай бұрын
Hello, great video. I am super new to python. And started using very recently for backend where its being used along with FastAPI. Can you please tell me what are some concepts/ topics which I should be aware for developing efficient code. For eg from this video, I learnt that which function runs concurrently and which doesn't. I had no idea tbh about this before. If you could spare few minutes and share some stuff which I should know it would be great.
@thanhlongle62769 ай бұрын
Thanks man for the video. I am trying to use fast api for db CRUD, which one do you think i should use for get post put and delete?
@codecollider9 ай бұрын
It depends on whether your database library supports non-blocking queries. Ideally, for endpoints involving database calls, use async def if your library allows awaiting query execution (like await db.execute()). If you're using SQLAlchemy, it provides both blocking and non-blocking methods for queries. It's generally recommended to use the non-blocking approach for better performance.
@thanhlongle62769 ай бұрын
@@codecollider thank you, everything i write is in normal, non async, and I am using sqlite3 package. I think i will use normal def for all of it, since they are all parallel, and the blocking of read and write on database is performed by SQLite itself
@JainamParekh-pk6sz8 күн бұрын
Hey I actually tried the code and found that all works sequentially for me. I executed the same code which you wrote. could please give me reason ? Please explain.
@codecollider8 күн бұрын
I guess you are testing on a single browser, if you look closely I had used two different browsers to make multiple requests. Try two browsers, hopefully that should resolve the issue.
@JainamParekh-pk6sz8 күн бұрын
@@codecollider Okay thanks that helped.
@adityahpatel3 ай бұрын
2 and 3 look the same. hello of each is printed first then bye from each. how is 2 and 3 different? its not explained crystal clearly
@ArulMuruganAS4 ай бұрын
its working as explained in unix but for some reason its a different behavior in windows
@arjunc58966 ай бұрын
def endpoint3() is not running parallely for me as supposed to what u said in the video. Instead it is sunning one at a time. Do u know why?
@codecollider6 ай бұрын
I believe you are testing APIs in the browser. Sometimes, browsers like Chrome have limitations on making parallel requests to the same URL. In the video, if you look closely, I am using two different browsers to hit the same API in parallel. You can try the same approach.
@arjunc58966 ай бұрын
@@codecollider Yes you are right. I tried from different browsers and it worked. Strange though. Thanks
@myselfriz7 ай бұрын
very well explanation.
@rajeshwariraghuwanshi3852Ай бұрын
gem video ✨
@nishantthakre81747 күн бұрын
The content is great, but Python's multithreading can't achieve true parallelism because of GIL which is introduced for thread safety. However, there are ways to work around this, such as using multiprocessing or alternative compilers like Jython or IronPython, instead of the default CPython. Also the multithreaded system demonstrated in your video is only achieving perceived parallelism and not actual parallel execution.
@ChrisHalden0077 ай бұрын
Great video. Thanks
@startup_cult4 ай бұрын
this is such an underrated video
@henilshah.2 ай бұрын
coooooooooooooooooooooooooooooooooolllllllllll 🤟thanks man
@gck2p3education9020 күн бұрын
Nice
@adrianmisak079 ай бұрын
great video
@lucaspraciano46408 ай бұрын
❤
@adityahpatel23 күн бұрын
It is extremeley easy to demonstrate thius using sleep. Every tutorial on the web uses sleep. the probolem is wvery funciton is not awaitable, hence this example doesnt apply.. in the real worldIt i
@robertavetisyan82827 ай бұрын
boooozi txeq
@Rejuyan-Ahmed21 күн бұрын
Thanks man
@udaym42047 ай бұрын
can you make fastapi how run under the hood and how @app.exception_handler work Thanks awesome contentent