Python multithreading 🧵

แชร์
ฝัง
  • เผยแพร่เมื่อ 31 ธ.ค. 2024

ความคิดเห็น • 86

  • @BroCodez
    @BroCodez  3 ปีที่แล้ว +41

    # ******************************************************
    # Python threading tutorial
    # ******************************************************
    # thread = a flow of execution. Like a separate order of instructions.
    # However each thread takes a turn running to achieve concurrency
    # GIL = (global interpreter lock),
    # allows only one thread to hold the control of the Python interpreter at any one time
    # cpu bound = program/task spends most of it's time waiting for internal events (CPU intensive)
    # use multiprocessing
    # io bound = program/task spends most of it's time waiting for external events (user input, web scraping)
    # use multithreading
    import threading
    import time
    def eat_breakfast():
    time.sleep(3)
    print("You eat breakfast")
    def drink_coffee():
    time.sleep(4)
    print("You drank coffee")
    def study():
    time.sleep(5)
    print("You finish studying")
    x = threading.Thread(target=eat_breakfast, args=())
    x.start()
    y = threading.Thread(target=drink_coffee, args=())
    y.start()
    z = threading.Thread(target=study, args=())
    z.start()
    x.join()
    y.join()
    z.join()
    print(threading.active_count())
    print(threading.enumerate())
    print(time.perf_counter())
    # ******************************************************

  • @blizni3371
    @blizni3371 2 ปีที่แล้ว +38

    If you have problem with huge amount of time displaying by time.perf_counter() function here you have solve of this problem:
    We can read in documentation:
    time.perf_counter()
    [...] The reference point of the returned value is undefined, so that only the difference between the results of two calls is valid.
    So to solve it we have to declare variable before our code, for example:
    starting_point = time.perf_counter()
    ...
    our code here
    ...
    print (time.perf_counter() - starting_point)

    • @KudoShinichii1412
      @KudoShinichii1412 ปีที่แล้ว +3

      thank you I understood that , but I am really wondering why did not happen to him

    • @Mildic
      @Mildic ปีที่แล้ว

      wow man thank you very much, i was looking at my code for like 10 minutes and couldnt figure it out

    • @NoPo1nt
      @NoPo1nt ปีที่แล้ว

      came here just for this. thank you

    • @lukaskelber
      @lukaskelber ปีที่แล้ว +1

      @@KudoShinichii1412 Same, does anyone know why Bro didn't have to subtract two perf counters? Is there maybe some setting for this?

    • @Dmitopur
      @Dmitopur ปีที่แล้ว +1

      Thx! I think without your solution that function counted seconds from the point of my pc was turned on.

  • @AmmarAlIessa
    @AmmarAlIessa 2 ปีที่แล้ว +6

    Really like how you go to the heart of the subject.. Concise and clear... Thanks..

  • @ilyassbabkhouti
    @ilyassbabkhouti ปีที่แล้ว +2

    This is brilliant .
    Excellent explanation !!!
    👏👏👏

  • @d1jn
    @d1jn 3 ปีที่แล้ว +13

    I really like how you explain everything so simply and quickly. Keep it up man !

  • @infinitecrafterYT
    @infinitecrafterYT ปีที่แล้ว +2

    nice video bro

  • @thepragmatic6383
    @thepragmatic6383 2 ปีที่แล้ว +3

    Thank you for these clear and precise explanations.
    As I am new to Python, this becomes very practical for my learning.

  • @waynefrannedavis9305
    @waynefrannedavis9305 10 หลายเดือนก่อน +1

    Interesting to see how Python addresses multi-processing and synchronization when compared to Elixir which is my go to language. At 75 years old, I am finally looking at object-orientation.

  • @entity5678
    @entity5678 2 ปีที่แล้ว +1

    Such a wonderful explanation..

  • @piotrkopcewicz5227
    @piotrkopcewicz5227 2 ปีที่แล้ว +3

    dobrze rozkminione :) Dziekowa

  • @felixnyamongo
    @felixnyamongo 2 ปีที่แล้ว +1

    Understood in one go. Good work bro

  • @samuellopez5155
    @samuellopez5155 2 ปีที่แล้ว +1

    great explanation, loved the theory before the actual code

  • @ilhamm1915
    @ilhamm1915 ปีที่แล้ว

    THAT IS ACTUALLY REALLY COOL NGL

  • @SleepyAizawa69
    @SleepyAizawa69 ปีที่แล้ว +3

    Firstly thank you bro
    Secondly if you guys have problem with main thread not printing 4then you must delete the() for writting the function in x=threading.thread()

    • @baldwin9207
      @baldwin9207 ปีที่แล้ว

      i was wondering why mine was different. thx!

    • @autoauto2000
      @autoauto2000 11 หลายเดือนก่อน

      @@baldwin9207but why, now it works

  • @ilordepic
    @ilordepic 2 ปีที่แล้ว

    hope the algorithm blesses your channel

  • @lawrencedoliveiro9104
    @lawrencedoliveiro9104 3 ปีที่แล้ว +1

    For I/O bound problems, it is better to use asyncio than threads. This gives less opportunity for race conditions and their consequent hard-to-reproduce bugs.

  • @giaxlab
    @giaxlab 2 ปีที่แล้ว

    Super, finally i learn this argument! :) Nice work!!!

  • @bekturasanbekov1979
    @bekturasanbekov1979 ปีที่แล้ว

    thx 4 vid br
    o!

  • @VenkataChalaBhaskar
    @VenkataChalaBhaskar 2 ปีที่แล้ว

    Excellent Explanation !!!

  • @brianwake100
    @brianwake100 2 ปีที่แล้ว

    Great video thanks

  • @aaroncatolico7550
    @aaroncatolico7550 2 ปีที่แล้ว

    Even though you sound like 'Butthead' from 'Beavis & Butthead', I still love you 'Bro'. And thanks for your awesome tutorials. 👍🏻👍🏻

  • @shuaibalghazali3405
    @shuaibalghazali3405 ปีที่แล้ว

    Thanks for this

  • @aliforootani9348
    @aliforootani9348 3 ปีที่แล้ว

    great explanation, thanks

  • @ugurbayrak9869
    @ugurbayrak9869 3 ปีที่แล้ว +1

    >>> Very consistent explanation :)
    >>> Could you please do this kind of tuts regarding python standart libr modules like Struct, OS, SubProcess and Select ?
    >>> Have a good time

  • @rubenc4696
    @rubenc4696 8 หลายเดือนก่อน

    thakns

  • @gamerawesome8105
    @gamerawesome8105 3 ปีที่แล้ว

    you sir are the best

  • @kamlesht.j9366
    @kamlesht.j9366 2 ปีที่แล้ว

    brooo you da bestt!!

  • @Sstevewong36
    @Sstevewong36 10 หลายเดือนก่อน

    great

  • @Johann.Liebert
    @Johann.Liebert 2 ปีที่แล้ว

    so simply, thankss

  • @FabioRBelotto
    @FabioRBelotto 2 ปีที่แล้ว

    I would like that you showed an example like this : you can eat and drink at same time, but you must finish such activities to study.

  • @philtoa334
    @philtoa334 3 ปีที่แล้ว

    Nice.

  • @beingzero7541
    @beingzero7541 2 ปีที่แล้ว

    Wow!!!!!

  • @dolevdo
    @dolevdo 3 ปีที่แล้ว

    amazing thank!s

  • @lw9954
    @lw9954 2 ปีที่แล้ว +1

    TY bro

  • @HussainAli-sb1dv
    @HussainAli-sb1dv ปีที่แล้ว

    love u

  • @charan2446
    @charan2446 3 ปีที่แล้ว

    Bro.. 👏 Heads down.

  • @uuhju7004
    @uuhju7004 3 ปีที่แล้ว

    nice

  • @Daniel-cl6hj
    @Daniel-cl6hj 3 ปีที่แล้ว +1

    breh.... this is so clear...

  • @BaminIce
    @BaminIce 5 หลายเดือนก่อน

    Print("Amazing")

  • @EissaAlahdul
    @EissaAlahdul 2 ปีที่แล้ว

    شكرا جزيلا

  • @nirutg5130
    @nirutg5130 3 ปีที่แล้ว

    Thank you very much

  • @airexpertdrop
    @airexpertdrop 3 ปีที่แล้ว

    oh yea its cool

  • @ahiamatagabriel5696
    @ahiamatagabriel5696 2 ปีที่แล้ว

    thank youuu

  • @Amir_Plays_non_stop
    @Amir_Plays_non_stop 3 ปีที่แล้ว

    Crystal Clear!

  • @gustavoaponte1814
    @gustavoaponte1814 ปีที่แล้ว

    meow~! uwu

  • @SuperStarEevee
    @SuperStarEevee 2 ปีที่แล้ว

    Thank you!

  • @xcorpionxyed2078
    @xcorpionxyed2078 2 ปีที่แล้ว +1

    Hey bro I've a problem.
    Whenever I write my own code (following the same procedure) it shows only 1 thread and takes allotted time, but when I copy the given description code it and paste it, shows the 4 threads
    Can't figure out why is it happening??

  • @moisesherrera71
    @moisesherrera71 9 หลายเดือนก่อน

    but what if a function returns a value, how should we write that so we have the function in a separate thread then main but we can capture the return value of the function

  • @Pjnpm
    @Pjnpm 3 ปีที่แล้ว +1

    Make a tutorial for flutter please beer is on me 🍺

  • @RenovaLabs
    @RenovaLabs 8 หลายเดือนก่อน

    Bro, Do they only work with functions?

  • @ClydeKilgore-df8hy
    @ClydeKilgore-df8hy 9 หลายเดือนก่อน

    Why do I get the following error after importing threading and attempting to use it? AttributeError: partially initialized module 'threading' has no attribute 'Thread' (most likely due to a circular import)
    same message when I use active_count()

  • @cinquecento1985
    @cinquecento1985 2 ปีที่แล้ว

    yeah.. multi threading in the morning.. sounds familiar. like brushing teeth while getting the pants on.. =)

  • @manuelvaal1257
    @manuelvaal1257 3 ปีที่แล้ว +1

    My main tread is taking 734078.1110504 seconds to complete its task. what possibly could be the issue?

    • @hinter9907
      @hinter9907 2 ปีที่แล้ว +2

      the solution:
      # add this line just before running x.start()
      start_time = time.perf_counter()
      # add these lines after z.join
      end_time = time.perf_counter()
      delta_time = end_time - start_time
      print(delta_time)

  • @autoauto2000
    @autoauto2000 11 หลายเดือนก่อน

    does not work 4 me?? how to unlock gil in pycharm

  • @estudio7753
    @estudio7753 2 ปีที่แล้ว

    ate

  • @aiviral_
    @aiviral_ 3 ปีที่แล้ว +1

    Hey I got this problem with Python showing 34568.4580 seconds while it only takes 3-4 seconds and it's not the only case in which this happens. Does anyone know how to display seconds correcty?

    • @wilsonsoeparman8574
      @wilsonsoeparman8574 3 ปีที่แล้ว +1

      Yup, me too

    • @mittlope2723
      @mittlope2723 2 ปีที่แล้ว

      just divide it with 10,000 and you will get 3.4 secs

    • @mm-fn9uj
      @mm-fn9uj 2 ปีที่แล้ว

      somewhy i have 374690.9 seconds

    • @hinter9907
      @hinter9907 2 ปีที่แล้ว

      the solution:
      # add this line just before running x.start()
      start_time = time.perf_counter()
      # add these lines after z.join
      end_time = time.perf_counter()
      delta_time = end_time - start_time
      print(delta_time)

  • @techboomers8935
    @techboomers8935 2 ปีที่แล้ว

    Kindly revealed your face , we want to sees a person who know every language exist in this world

  • @reinkdesigns
    @reinkdesigns 2 ปีที่แล้ว

    should i be concerned that when i run the same code as you i get "590447.4203372" returned from "print(time.perf_counter())"

    • @ramanuj_g
      @ramanuj_g 2 ปีที่แล้ว

      check above comments as the answer is there above.... nothing to be concerned just u have to add start time and subtract it from end time

  • @peesnlav
    @peesnlav 2 ปีที่แล้ว +4

    for some reason my main thread waits for the other 3 threads to finish before it executes the print functions. i wrote the exact same code he wrote. anyone have an idea?

    • @blizni3371
      @blizni3371 2 ปีที่แล้ว +6

      Hello, you probably wrote parentheses when declaring - target=
      for example:
      x = threading.Thread(target=eat_breakfast(), args=())
      Remove this and let's check again :)

    • @stevemiller123
      @stevemiller123 2 ปีที่แล้ว

      I have the exact same issue, did you resolve it? Even when copying and pasting the code from the description.
      It's behaving as if I joined all the threads even when I haven't. So when I actually write, x.join(), y.join(), z,join().. the behaver is the same.

    • @MrPsichoKid
      @MrPsichoKid ปีที่แล้ว +1

      @@blizni3371 jesus Christ, thanks man, i was in a hole for like 2 hourse before figuring out this!

    • @blizni3371
      @blizni3371 ปีที่แล้ว

      @@MrPsichoKid No problem!

    • @ligdjumvidja8294
      @ligdjumvidja8294 ปีที่แล้ว

      Thanks a lot my friend ! Iwas trying to figure out why my example was faulty @@blizni3371

  • @ixmjk
    @ixmjk 3 ปีที่แล้ว +3

    Thank you Bro
    i run the exact same code but for me the time.perf_counter() returns a really big value for time taken sth like 11929.1326382 but in reality it takes 5 to 6 seconds to run i search online for solutions but nothing came out.
    Any solutions?

    • @aiviral_
      @aiviral_ 3 ปีที่แล้ว

      I got the same issue :\

    • @wilsonsoeparman8574
      @wilsonsoeparman8574 3 ปีที่แล้ว

      Me too

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 3 ปีที่แล้ว

      Are you taking the difference between values? Because the zero point is implementation-defined.

    • @nakiros24
      @nakiros24 2 ปีที่แล้ว +3

      this worked for me:
      import threading
      import time
      def eat_breakfast():
      time.sleep(3)
      print("You eat breakfast")
      def drink_coffee():
      time.sleep(4)
      print("You drank coffee")
      def study():
      time.sleep(5)
      print("You finish studying")
      begin_time = time.perf_counter()
      x = threading.Thread(target=eat_breakfast, args=())
      x.start()
      y = threading.Thread(target=drink_coffee, args=())
      y.start()
      z = threading.Thread(target=study, args=())
      z.start()
      x.join()
      y.join()
      z.join()
      print(threading.active_count())
      print(threading.enumerate())
      print(time.perf_counter()-begin_time)