python 多线程应用

python可以方便地支持 多线程。可以快速创建线程、互斥锁、信号量等等元素,支持线程读写同步互斥。美中不足的是,python的运行在python 虚拟机上,创建的多线程可能是虚拟的线程,需要由python虚拟机来轮询调度,这大大降低了python多线程的可用性。我们经今天用了经典的生产者和 消费者的问题来说明下python的多线程的运用 上代码:

#encoding=utf-8
import threading
import random
import time
from Queue import Queue

class Producer( threading . Thread ):

    def __init__( self , threadname , queue ):
        threading . Thread . __init__( self , name = threadname)
        self . sharedata = queue

    def run( self ):
        for i in range( 20 ):
            print self . getName (), 'adding' , i , 'to queue'
            self . sharedata . put( i)
            time . sleep( random . randrange( 10) / 10.0)
        print self . getName (), 'Finished'


# Consumer thread

class Consumer( threading . Thread ):


    def __init__( self , threadname , queue ):
        threading . Thread . __init__( self , name = threadname)
        self . sharedata = queue


    def run( self ):

        for i in range( 20 ):
            print self . getName (), 'got a value:' , self . sharedata . get()
            time . sleep( random . randrange( 10) / 10.0)
        print self . getName (), 'Finished'


# Main thread

def main ():

    queue = Queue()
    producer = Producer( 'Producer' , queue)
    consumer = Consumer( 'Consumer' , queue)
    print 'Starting threads ...'
    producer . start()
    consumer . start()
    producer . join()
    consumer . join()
    print 'All threads have terminated.'
if __name__ == '__main__' :
    main()

  你亲自运行下这断代码,可能有不一样的感觉!理解以后可以用python cookielib 再结果python urllib 写一个多线程下载网页的脚本应该没什么问题了 作者:老王@python python教程 老王python,提供pythn相关的python教程和python下载,希望大家能够喜欢

你可能感兴趣的:(python)