threading vs multiprocessing in python

A comparative look between threading and multiprocessing in python.
I will show activity plots of 4,8,16 threads vs 4,8,16 processes and discuss the differences between the two modules.
In summary: threads in python are concurrent and not parallel, so no two threads can execute at the same time. The way to get around this isto use the core module multiprocessing and spawn child python processes to each run work in parallel.

Пікірлер: 330

  • @sorcerer_of_supreme
    @sorcerer_of_supreme2 жыл бұрын

    I can't imagine the effort and time you have invested for making this video.. Very informative

  • @DavesSpace

    @DavesSpace

    2 жыл бұрын

    Thank you very much!

  • @ErikS-

    @ErikS-

    Жыл бұрын

    I fully agree. It is one of the best videos showing the issues with multithreading and how it compares to multiprocessing. It really deserves a higher piority in youtube search.

  • @anonfourtyfive

    @anonfourtyfive

    10 ай бұрын

    @@ErikS- yup, 18:24 clear my mind about it. I was always wondering the real impact of it. damn right I was for using threading, but yet, I understand now the utility of multiprocessing. +1 🦾

  • @mohammadjavadebrahimi5895

    @mohammadjavadebrahimi5895

    7 ай бұрын

    Where can we have full code? Can you give a GitHub link plz? Also explain any risk of doing this multiprocessing

  • @jarrodhroberson

    @jarrodhroberson

    6 ай бұрын

    Too bad this video is incorrect on almost ever level.

  • @EbonySeraphim
    @EbonySeraphim2 жыл бұрын

    Very nice full presentation. The short of it is that "Python" doesn't support parallel execution. For most programmers, when you talk about having multiple threads, the assumption is that those threads can and will execute in parallel. Unfortunately, Python was designed with single core CPU in mind so even though the idea of threads have existed for a while in computing, code wasn't likely to be run on a multithreaded/multicore/multicpu machine to do anything in parallel. It was just the operating system giving out small slices of time to execute one thread or another and it was perceived like both were happening at the same time -- very much like your graphs show. Python, like most interpreted languages, cannot get over this problem because of the synchronization and locking needed to share access to data across threads so they inherently can only allow one "Python interpreted" thread to run at a time. Only library implementations in C can get around this under the hood by spawning real threads on Python's behalf to do work. Or this "multiprocess" approach, which creates a new process and an independent Python interpreter with entirely separate program state and memory. This approach isn't really a Python solution because any programming language can spawn a new OS process (provided a library is available to access fork() and exec*() system calls) and then the OS will execute that process in parallel on a multicore machine. But the thing about multiple processes is that it's harder and slower to share and synchronize data between processes than it is threads. It may not be an issue in some cases if not much synchronization is needed (the case if only an end result matters at the end of parallel work), but it can be a severe a limitation. The last thing I'll say is that often times IO driven or IO heavy applications don't really need a performance boost of true parallel execution. The wait for IO (disk and network for example) are so slow compared to CPU execution that most threads would be waiting for IO anyways. With proper async-io setup (kqueue, select, epoll, IO completion ports) you can use a single thread to handle and dispatch thousands of IO requests and still be bottlenecked by IO. This is how/why people can still write "performance intensive" applications with interpreted languages and compete with a language like C or C++. Maximizing IO efficiency is simply something that sometimes C/C++ won't offer any benefit for so much "slower" languages appear to be just as fast.

  • @sylvianblade75

    @sylvianblade75

    2 жыл бұрын

    I was able to combine multithreading under multiprocessing using threadpoolexecutor and processpoolexecutor thinking I could achieve true parallelism. But you’re right there is no real benefit doing multiprocessing 99% if your program is IO bound. The extra overhead and slowdown spawning processes is simply not worth it.

  • @alessandropolidori9895

    @alessandropolidori9895

    Жыл бұрын

    What i can’t understand from the video is why multi-threading (even if non parallel) should help, in theory, in IO heavy applications. Can you help me?

  • @sephirot7581

    @sephirot7581

    Жыл бұрын

    ​@@alessandropolidori9895 When it comes to IO the operating system is doing this in the background. So this means, you can schedule an other thread and the operating system will still do the work in the background and if your thread is scheduled again, the OS maybe finished his work and you are able to continue your work

  • @janekschleicher9661

    @janekschleicher9661

    Жыл бұрын

    @@alessandropolidori9895 In theory, one thing where it can help is if the hot data that is processed, can e.g. mostly be cached in some of the direct for a cpu available cache line in L1 or L2 cache. An example could be a redis like implementation with a bloom filter (very small memory that can definitly deny if data is not in the slow data store behind and 99% or so sure if it is there). And for such a scenario, it's of course helpful if for different data stores, each one works on a different cpu core, so that the bloom filter is already in the ultrafast L1 or L2 cache in case. To be honest, for python scenarios, this is a bit far off - as you would usually implement such things in a system language like C, C++, Rust, Ada, or even Golang (there indeed exists a redis clone). The latter is an example of a language that still has its own run time and garbage collection, but optimized for such tasks. The more practical example is that in IO heavy tasks, some individual tasks will block. (Classic example fetch data from a SQL database or an url). Now you certainly don't want all other tasks to wait for it. The modern approach for it is async - but this is relatively new in Python (something like 4 years "young") and multithreading were the answer before the async implementations were available and production ready. It's also nowadays a simple way (but slightly less performant than the async implementations in most cases) to alter code and have this (mostly) non-blocking behaviour if you don't want or can't refactor the implementation. In general, nowadays I'd recommend either optimize the program to just run on one cpu core or to run on all, nothing in between. You can't really mix the use cases and still be performant anyway. In python, you'd end up fighting a lot with GIL (global interpreter lock) and if you have to put both use cases into one application, I'd suggest to have two different programs that communicate e.g. with a message queue asynchronously. I remember a lot of headaches with machine learning optimized implementations (e.g. Spacy) in combinations with a web server (running with wsgi). Short story: don't do it - separate them 🙂

  • @DR_1_1

    @DR_1_1

    7 ай бұрын

    I notice a 20-50% slower file copy with Python compared to system, for example with shutil.move() on Windows, I'm running the file copy on a separate pyQt thread... juste renaming the file which should not take any noticeable processing time. Do you think another method might be faster? I'm asking because I expect C++ would be as fast as the system in this case, not 20-50% slower...

  • @ninjahkz4078
    @ninjahkz40782 жыл бұрын

    this video is amazing, honestly one of the best I've ever seen, thank you from the bottom of my heart for dedicating so much time to creating it❤️

  • @neelshah1943
    @neelshah19435 ай бұрын

    Excellent explaination about the most complicated questions that I have ever come across in an interview setting. Even though, this is an after math I am super glad to learn in with such a thought clarity. This is how you become fear-less!!! Thank you Dave ❤!

  • @aramshojaei8490
    @aramshojaei8490 Жыл бұрын

    This is the most comprehensive video I've ever seen on multithreading and multiprocessing. Great job!

  • @aeronesto
    @aeronestoАй бұрын

    This is the very best explanation of threading vs multiprocessing that I have ever seen. Well done!

  • @falwk
    @falwk5 ай бұрын

    Absolutely the best video on youtube describing how threading works in Python, with concise demonstrations and a well thought of script and presentation. 10/10, subscribed

  • @TON-vz3pe
    @TON-vz3pe Жыл бұрын

    Massively underrated video. Saved it in my library. Thank you sir.

  • @NONAME-ey6qs
    @NONAME-ey6qs Жыл бұрын

    This is hands down the most thorrow video on a topic. And youtube shows me this exactly 1 year after I desperately needed it. Better late than never i guess.

  • @DChoi5815
    @DChoi5815 Жыл бұрын

    This is by far the most comprehensive and easily consumable video on any CS learning I've ever seen. Great job! Giving you a sub for sure. Keep it up Dave!

  • @AmanKumar-tu2og
    @AmanKumar-tu2og Жыл бұрын

    The best I have ever watched on multiprocessing v/s threading!! The visualizations were a complete treat ❤

  • @MrHvfan
    @MrHvfan Жыл бұрын

    Thankyou Dave, i'm so glad youtube algo's bought your video to my daily feed. A really fascinating insight into thread and processes and the presentation style was perfect. Best wishes.

  • @calloq1035
    @calloq10357 ай бұрын

    What an incredible video. I’ve just been blindly picking one or the other, not sure the differences between either one, but this makes everything so clear. I’m so glad I found it!!

  • @meme-ge8tq
    @meme-ge8tq Жыл бұрын

    This video was so informative, even for someone who is unfamiliar with the concept You deserve a lot more recognition

  • @kedardeshmukh1168
    @kedardeshmukh1168 Жыл бұрын

    This sooooooo great.... probably the best explanation on KZread

  • @CherifRahal
    @CherifRahal3 ай бұрын

    The amount of work done here is unblievable. Thank you so much

  • @mehulaggarwal7776
    @mehulaggarwal77762 жыл бұрын

    Literally the best video ive seen yet on this topic. Keep posting man!

  • @rampage_sl
    @rampage_sl Жыл бұрын

    Brilliant work!! Best video on multithreading/processing I've seen in a while

  • @jerrylu532
    @jerrylu5322 жыл бұрын

    This channel is a hidden gem!

  • @maply007
    @maply007 Жыл бұрын

    The best video in KZread explaining the concept! Thanks

  • @alexandrepv
    @alexandrepv2 жыл бұрын

    Very well explained :) I can see your number of subscribers growing at a steady pace mate. Keep it up! Good stuff!

  • @DavesSpace

    @DavesSpace

    2 жыл бұрын

    Thank you very much! Yes steady growth is encouraging 😊

  • @weiao7276
    @weiao72762 жыл бұрын

    It is my first time to figure out the multiprocess and threading in Python. Thanks a lot.

  • @DavesSpace

    @DavesSpace

    2 жыл бұрын

    Glad it helped!

  • @nj6553
    @nj6553 Жыл бұрын

    2 minutes into this I already understand it better than all other readings I did online. Nice!

  • @Adamreir
    @Adamreir2 жыл бұрын

    I really, really don’t understand why you don’t have more followers. Keep up the good work. This is really well done! Informative and straight out fun!

  • @javedalam7383
    @javedalam73832 жыл бұрын

    Brilliant representation of the concept. Thanks for all you effort.

  • @retrogamessocietybrasil3372
    @retrogamessocietybrasil3372 Жыл бұрын

    One of the best lectures on multiprocessing and threading that I ever saw. Thanks for the guide and info, this will help me improve my own lectures on the subject

  • @yeahthisismyhandleyouknow
    @yeahthisismyhandleyouknow7 ай бұрын

    Yay, it's so interesting to see a visual representation of something that I have been figuring out during my work for a few years with threading\multiproc. When you understand it on instincts but not so visualized and vivid.

  • @rustyelectron
    @rustyelectron2 жыл бұрын

    Woah, just found your channel. This is truly a goldmine.

  • @Nielsx
    @Nielsx Жыл бұрын

    Great video. The best multiprocessing v/s threading graphical explanation on the hole internet. Thanks for the dedication. New subscriber.

  • @MultiMojo
    @MultiMojo Жыл бұрын

    Incredible video and crystal clear explanations. Hope to see more !

  • @sarthaknarayan2159
    @sarthaknarayan2159 Жыл бұрын

    Hands down best video on python multithreading and multiprocessing.

  • @Subbestionix
    @Subbestionix7 ай бұрын

    Awesome, no pressure and yet informative! Good work! Thanks a lot! allthough i knew the topic well from uni, i could deepen my understanding with this!

  • @Matlockization
    @Matlockization Жыл бұрын

    I am impressed with your use of visual aids in explaining how all this works. It definitely makes a lot more sense.

  • @trustytrojan
    @trustytrojan Жыл бұрын

    fantastic data visualization with the activity charts, i will be checking out more of your videos

  • @thahrimdon
    @thahrimdon7 ай бұрын

    As someone who does data analysis and plotting with Python, thank you. So much.

  • @Simorenarium
    @Simorenarium Жыл бұрын

    That explains the one intern I had, who wouldn't want to believe that threads are simultaneous. He said he had some python experience, but we use java.

  • @ajblondell5853
    @ajblondell58536 ай бұрын

    This video is amazing! I don't usually go to youtube for programming content because its all just copy paste. This is one of the most informative and useful vids I've come across in a long time. I love the graphics/ visuals. I don't know how you managed to make multithreading and multiprocessing so engaging but bravo! 👏 Keep up the great work and thank you for the content!

  • @jylpah
    @jylpah7 ай бұрын

    Outstanding video. “Like” is an understatement. So clear and informative.

  • @linuxguy1199
    @linuxguy11993 ай бұрын

    One major improvement I've found is taking your CPU intensive Python code and writing it in this language called "C". Joking aside, great video!

  • @marzhanzhylkaidarova3994
    @marzhanzhylkaidarova39946 ай бұрын

    Thank you so much for your content! very useful and I really enjoyed the way you structure and visualize your video! Thank you!

  • @ivankudinov4153
    @ivankudinov415310 ай бұрын

    This video is a marvellous craftsmanship

  • @abhinav_mzn
    @abhinav_mzn10 ай бұрын

    One of the best video that I have seen on the internet...This video forced me to subscribe this channel.

  • @aRWorldDJ
    @aRWorldDJ6 ай бұрын

    This is a masterpiece, honestly. Content-wise is very informative, but the way you represent everything is like watching a sci-fi movie.

  • @burnthewitch7286
    @burnthewitch7286 Жыл бұрын

    This is the best video explanation on this topic, WOW

  • @daymaker_bybit
    @daymaker_bybit6 ай бұрын

    This was a super quality educational video, thanks so much!

  • @tinkeringengr
    @tinkeringengr Жыл бұрын

    Thanks for this -- looking forward to more of your work!

  • @user-jt5nd3yq4u
    @user-jt5nd3yq4u3 ай бұрын

    Excellent work, very informative! Thanks a ton for your time!

  • @Exce11ent22
    @Exce11ent22 Жыл бұрын

    I wish growth to your channel. A very informative video with amazing visualization. There would be more of this in my recommendations.

  • @daveys
    @daveys6 ай бұрын

    Excellent video, superbly made. Thanks for posting.

  • @wonyoungjung3268
    @wonyoungjung32686 ай бұрын

    🎯 Key Takeaways for quick navigation: 00:15 🐍 *Python is multi-threaded but not simultaneously multi-threaded, meaning two threads cannot execute simultaneously within the same process.* 03:36 🚧 *Python's Global Interpreter Lock (GIL) ensures thread safety by allowing only one thread to execute at a time within a process.* 06:00 🔄 *Multi-threading is suitable for I/O-bound tasks, where threads can perform other tasks while waiting for I/O operations.* 11:12 🚀 *Multi-processing is effective for CPU-bound tasks, allowing processes to run simultaneously and utilize multiple CPU cores.* 18:11 📊 *Choose multi-threading for I/O-bound tasks and multi-processing for CPU-bound tasks, considering the nature of your application.* Made with HARPA AI

  • @SubhamSharma-ei3vs
    @SubhamSharma-ei3vs2 жыл бұрын

    Very nice explanation . keep up the good work.

  • @etienneboutet7193
    @etienneboutet71932 жыл бұрын

    Very informative video. Thanks a lot !

  • @robmoore423
    @robmoore423 Жыл бұрын

    This was incredibly helpful!

  • @felixfourcolor
    @felixfourcolor7 ай бұрын

    PEP 703 go brrr! I'm excited to try it on python 3.13

  • @brpawankumariyengar4227
    @brpawankumariyengar42279 ай бұрын

    Awesome video and so very well explained. Thank you so very much. It was excellent.

  • @TheRailroad99
    @TheRailroad996 ай бұрын

    A few things to note: The GIL (and therefore sequential thread execution within a process) are only an issue in CPython, not in (most) other python interpreters. Jython for example has true parallel threads. Also most other languages have them. This is mostly a python problem

  • @mengisi
    @mengisi Жыл бұрын

    Unbelievable I found this video! Now open my mind about Python! Please make video like this agaiinn!

  • @kemoxplus
    @kemoxplus6 ай бұрын

    Great explanation! Thanks for clarifying.

  • @NileGold
    @NileGold Жыл бұрын

    I love this video, the explanation is perfect

  • @daniiltroshkov6081
    @daniiltroshkov60812 ай бұрын

    Excellent video! Thank you!

  • @karaca_ahmet
    @karaca_ahmet6 ай бұрын

    It was a very good and impressive presentation. listening to it made me feel as if David Attenborough was describing the lyrebird like in the bbc documentary. :) Thank you for your effort...

  • @ravithejaburugu8926
    @ravithejaburugu8926 Жыл бұрын

    Thanks for the detailing. Excellent

  • @azmatullah2847
    @azmatullah28473 ай бұрын

    Thanks for the really great information.❤

  • @michaelmueller9635
    @michaelmueller963511 ай бұрын

    This video is completely underrated.

  • @Kattemageren
    @Kattemageren Жыл бұрын

    This is a brilliant video, thank you

  • @giladfuchs2377
    @giladfuchs23776 ай бұрын

    amazing explanation!! thank you!!

  • @peterstark9381
    @peterstark9381 Жыл бұрын

    Is there a preferred way to have the OS do the multiprocessing for you? Meaning, not using one control process of python to kick-off all processes and waiting for them, but rather starting them loosely (e.g. using os.fork(), os.setsid, function() and then sys.exit)? I want to avoid the controlling process to get stuck waiting for the threads/processes.

  • @hassaanshah9819
    @hassaanshah9819 Жыл бұрын

    Awesome attention to details 😀

  • @a.for.arun_
    @a.for.arun_2 жыл бұрын

    Awesome video. Those visuals are helpful. Thank you

  • @DavesSpace

    @DavesSpace

    2 жыл бұрын

    Glad you like them!

  • @TurboLoveTrain
    @TurboLoveTrain6 ай бұрын

    You can run parallel threads using PdP (Parallel distributed Processing) if you have a process that can run non serial...obviously there is networking overhead. Great video--lots of ground to cover.

  • @roark45
    @roark45 Жыл бұрын

    Wow! Really well explained

  • @Haax06
    @Haax065 ай бұрын

    Great video! One question, how did you create the time series visualizations of threads and processes?

  • @greob
    @greob7 ай бұрын

    Thanks for sharing this nice presentation!

  • @sjqq4873
    @sjqq4873 Жыл бұрын

    Very helpful video! How were the moving graphs visualized?

  • @Mrslykid1992
    @Mrslykid19922 жыл бұрын

    HOLY CRAP THIS IS A GREAT USE CASE!

  • @DrGreenGiant
    @DrGreenGiant4 ай бұрын

    I'd be curious if there are differences between python implementations when it comes to threading and multiprocessing. Might be interesting to see if pypy, for example, is more performant in spawning tasks. This is the first video from you I've seen and really enjoyed it!

  • @alexengineering3754
    @alexengineering3754 Жыл бұрын

    Good Explanation, next time i know exactly which one is better for my purpose.

  • @dokwonsuh
    @dokwonsuh3 ай бұрын

    Amazing video. How did you record your cores' occupancy? I wanted to measure the performance of multithreading/multiprocessing on my data analysis and would love to have more insight as to the work done by each core, rather than just stopping the time. Thank you :)

  • @fabricio_patrocinio
    @fabricio_patrocinio Жыл бұрын

    Você tá de parabéns, um dos vídeos mais bem didáticos que vi sobre python. Bom trabalho e certamente irei ver mais vídeo seu!

  • @nathanhelmburger
    @nathanhelmburger6 ай бұрын

    My rule of thumb from trial and error is that you should always leave about 1 core free for each set of 8 (using python and Linux). So 2 cores free for 16 cores would be 14 max. Otherwise the system just bogs down and you get less performance and greater chance of hanging up.

  • @ImSidgr
    @ImSidgr2 жыл бұрын

    Very high quality!

  • @AlexandreSiedschlag
    @AlexandreSiedschlag Жыл бұрын

    1ºclass work, Congratz

  • @Schlumpfpirat
    @Schlumpfpirat Жыл бұрын

    Knew all of that already (wish it was more tl;dw - like 2mins) but think it's super extensive + informative for a beginner.

  • @TusharPal93
    @TusharPal93 Жыл бұрын

    Really nice explanation.

  • @emersontavera9362
    @emersontavera9362 Жыл бұрын

    thank you so much, it was a great video

  • @-_Nuke_-
    @-_Nuke_-4 ай бұрын

    Thank you so much for this!

  • @soy_terricola
    @soy_terricola Жыл бұрын

    Excelent content!

  • @romangaranin2675
    @romangaranin26757 ай бұрын

    Amazing video! Thanks a lot!

  • @user-is5vn8ie5v
    @user-is5vn8ie5v8 ай бұрын

    Great job and thank you so much !

  • @iainelder7607
    @iainelder7607 Жыл бұрын

    Why did you use "arrays" instead of stock lists? I didn't recognize the syntax or the understand the reason for the dt variable. Thank you for the visual explanation. What are you using to draw the charts?

  • @jayaganthan1
    @jayaganthan110 ай бұрын

    Awesome video. Thanks

  • @jcashion123
    @jcashion123 Жыл бұрын

    Just a few weeks ago I went through this discovery myself when writing a wordle solver in python. This video would have been very helpful at that time. Everything explained here is spot on.

  • @AmitKB00
    @AmitKB0010 ай бұрын

    Great description!

  • @Shontushontu
    @Shontushontu2 жыл бұрын

    I love your channel :) you are a 3 blue 1 brown in the making, if not better

  • @osogrande4999
    @osogrande49997 ай бұрын

    Fantastic video.

  • @robinmaurer2645
    @robinmaurer2645 Жыл бұрын

    It took me to 7:50 to realize that the voice is Ai generated. Good job. Also thanks for the helpful indepth video!

  • @gastonarevalo1237
    @gastonarevalo12373 ай бұрын

    Really informative video¡¡ I struggled a bit with the accent and speed but it's really good¡

  • @Aceptron
    @Aceptron3 ай бұрын

    how did you graph the thread usage and work done per thread. Loved your illustrations

  • @shahanazpatel-gd2cq
    @shahanazpatel-gd2cq12 күн бұрын

    Dear Dave, Looks like you have the perfect graphical view of the threads and cpu usage.. is it possible to get this python code so as I can run on my PC ?

  • @gustavorabino9353
    @gustavorabino9353 Жыл бұрын

    I wish people in general were aware of the amount of intellectual work put into the devices we use daily. We are giving things for granted in society and losing respect to science and math, the very things that sustain our civilization.