Saltycrane logo

SaltyCrane Blog

Notes on Python, Django, and web development on Ubuntu Linux

    

Simplistic Python Thread example

Here is a simple Python example using the Thread object in the threading module.

import time
from threading import Thread

def myfunc(i):
    print "sleeping 5 sec from thread %d" % i
    time.sleep(5)
    print "finished sleeping from thread %d" % i

for i in range(10):
    t = Thread(target=myfunc, args=(i,))
    t.start()

Results:

sleeping 5 sec from thread 0
sleeping 5 sec from thread 1
sleeping 5 sec from thread 2
sleeping 5 sec from thread 3
sleeping 5 sec from thread 4
sleeping 5 sec from thread 5
sleeping 5 sec from thread 6
sleeping 5 sec from thread 7
sleeping 5 sec from thread 8
sleeping 5 sec from thread 9

...and 5 seconds later:

finished sleeping from thread 0
finished sleeping from thread 1
finished sleeping from thread 2
finished sleeping from thread 3
finished sleeping from thread 4
finished sleeping from thread 5
finished sleeping from thread 6
finished sleeping from thread 7
finished sleeping from thread 8
finished sleeping from thread 9

17 Comments — feed icon Comments feed for this post


#1 Tomek commented on 2009-05-24:

Cool ;) I like such simplistic examples. THX.

Tomek


#2 Eliot commented on 2009-05-24:

Tomek, heh, sometimes I do too.


#3 Oleg Tarasenko commented on 2009-09-10:

I also like the example.

I tuned it a little bit, so can use like a very simple load testing tool. E.g. if you need to generate few thousands of request.

import    urllib2                                                                                                                              
from threading import  Thread                                                                                       
def btl_test():                                                                                                                                 while 1:                                                                            
   page = urllib2.urlopen("example.com")

for i in range(120):                                                                                                                        
       t = Thread(target = btl_test)                                                                                                           
        t.start()

#4 Dankoozy commented on 2009-11-22:

Nice ... ssssssssssss very useful


#5 Bino commented on 2009-12-09:

Hi Elliot and all .. That realy great impact example.

Just one question, at line -->

t = Thread(target=myfunc, args=(i,))

Why there is a "comma" after "i" while there is only single paramater ? is it a must ?

Sincerely -bino-


#6 Eliot commented on 2009-12-09:

Oleg,
That looks like a cool example. Thanks!

Bino,
I gave it a quick try, and it looks like the comma is required.

The Thread object expects a tuple for the args argument. Since the operator for forming tuples is the comma and not the parentheses, a comma is required for a tuple of one item. See here for more info about that.


#7 khanal commented on 2012-03-29:

Hi Elliot and all .. That realy great impact example.

Just one question, at line -->

t = Thread(target=myfunc, args=(i,))

Why there is a "comma" after "i" while there >is only single paramater ? is it a must ?

Sincerely -bino-

bino, the ',' after is necessary here since the argument (or the set of arguments) is a tuple. remember (tuple,) [list,] {dictionary,}

in the above types, a comma is not mandated after the last element unless it only has a single element. So, you would not have to type list = [1,2,] but you would have to type list = [1,] or it would not be a list. Why make a list with one element? Well, you could always append to a list iff it IS a list.

ps. The reason I chose list instead of tuple is that the word list seems to naturally make sense in this explanation.


#8 Hopping Bunny commented on 2012-03-29:

I finally broke in to that exclusive world of threads, thanks to your example. THANKS A TONNE !!!!!!!!


#9 Eliot commented on 2012-03-30:

khanal: The comma is only required for tuples. Single item lists and dicts don't require a comma.


#10 sadashiv thota commented on 2012-05-03:

very useful example thanks a lot...................


#11 vijay commented on 2012-05-11:

very helpful..


#12 Ben commented on 2012-08-31:

what happen if i get this kind of things :

jsb.lib.threads:98 start_new_thread | .usr.lib.python2.7.threading:495 start | [HTML_REMOVED]: can't start new thread

threads - thread space is exhausted - can't start thread


#13 love kumar commented on 2012-12-23:

Dear sir, I am new to python, and i tried several examples , now i am looking for something in threading and multithreading, i already search on web but only found how to print thread number and timing of thread execution, i am looking for some thing where i can use thread with my own programs and also some basics of threading with details. Thank you in advance. Regards


#14 james commented on 2013-06-26:

#9 Eliot commented on 2012-03-30:
khanal: The comma is only required for tuples. Single item lists and dicts don't require a comma.

Note: parenthesis are also for grouping Boolean expressions and math.


#15 aucgoillk commented on 2013-11-27:

canada goose jacket outlet storecanada goose jacket outlet store torontocanada goose jacket outlet stores ilss135 [HTML_REMOVED]Canada Goose Femme[HTML_REMOVED] ioye221 [HTML_REMOVED]Canada Goose Outlet[HTML_REMOVED] canada goose jacket outlet torontocanada goose jacket parka;[HTML_REMOVED]canada goose parkas online[HTML_REMOVED] canada goose jacket plus sizecanada goose jacket price.omoqj6355 [HTML_REMOVED]Cheap Canada Goose[HTML_REMOVED] canada goose jacket price for womencanada goose jacket price in torontocanada goose jacket price listcanada goose jacket price list canadacanada goose jacket price range [HTML_REMOVED]Cheap Canada Goose[HTML_REMOVED] canada goose jacket price torontocanada goose jacket prices.qris513 [HTML_REMOVED]Discount canada goose sale[HTML_REMOVED] mkbvx5341 [HTML_REMOVED]canada goose milano[HTML_REMOVED] canada goose jacket prices canadacanada goose jacket prices in toronto.

http://horaproperty.ie/node/2302001 http://phpfoxtemplates.ceofox.com/index.php?do=/forum/thread/25238/gk-cheap-ugg-ugg-classic-tall-boots-black-size-8-cgk/ http://www.calvarysf.com/node/17344 http://fitnessandathletics.com/node/348507 http://recoveringfromchemo.com/node/38455 http://planeta-sochi.com/?q=node/40513


#16 Fellow commented on 2014-01-18:

groovy. but on my setup the 'finished' notifications came crashing back all jumbled up. some of them on the same line :o

i put a tiny delay in the for loop and it organized them to all arrive back in order like good little boys and girls:)


#17 cchliu commented on 2014-06-22:

Really love this kind of small examples to get things started~~ Thanks a lot!

BTW: when I tried the code, the "finished results" are not nicely printed in order, kind of in a random way like:

finished thread 0
 finished thread 2
finished thread 1finished thread 3
finished thread 7

finished thread 4
finished thread 5
finished thread 9finished thread 6finished thread 8

Post a comment

Required
Required, but not displayed
Optional

Format using Markdown. (No HTML.)
  • Code blocks: prefix each line by at least 4 spaces or 1 tab (and a blank line before and after)
  • Code span: surround with backticks
  • Blockquotes: prefix lines to be quoted with >
  • Links: <URL>
  • Links w/ description: [description](URL)
Created with Django | Hosted by Linode