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()
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下载,希望大家能够喜欢