Python 多线程 threading,pythonthreading,#!/usr/bin





#!/usr/bin/python#-*-coding:utf-8-*-__author__=‘gaogd‘‘‘‘###多进程importthreadingimporttimedefrun(num):print‘Hi,Iamthread%s..lalala‘%numtime.sleep(1)foriinrange(20):t=threading.Thread(target=run,args=(i,))t.start()‘‘‘‘‘‘##进程启动完20个线程就继续走下去,不等待这20个线程走完就回到住线程importthreadingimporttimedefrun(num):globalNUMtime.sleep(1)print‘Hi,Iamthread%s..lalala‘%numNUM+=1NUM=0foriinrange(20):t=threading.Thread(target=run,args=(i,))t.start()###time.sleep(2)print‘------>‘,NUM‘‘‘‘‘‘importthreadingimporttimedefrun(num):globalNUMtime.sleep(1)print‘Hi,Iamthread%s..lalala‘%numNUM+=1NUM=0foriinrange(20):t=threading.Thread(target=run,args=(i,))t.start()t.join()##等子线程执行完再执行子线程。print‘------>‘,NUM‘‘‘‘‘‘###下面两百个线程时并发执行,但是共享内存有点问题importthreadingimporttimedefrun(num):globalNUMtime.sleep(1)print‘Hi,Iamthread%s..lalala‘%numNUM+=1NUM=0p_list=[]##线程列表,追加线程实例t到这个列表foriinrange(500):t=threading.Thread(target=run,args=(i,))t.start()p_list.append(t)foriinp_list:t.join()##等待线程都执行完再执行这个,但是共享的内存有可能出现问题,所有出现NUM不一定等于500,没有加锁导致的问题,这就涉及安全了print‘------>‘,NUM‘‘‘importthreadingimporttimedefrun(num):globalNUMtime.sleep(1)print‘Hi,Iamthread%s..lalala‘%numlock.acquire()##加锁NUM+=1lock.release()##释放锁,如果不释放,那后面的就都改不了数据了NUM=0p_list=[]lock=threading.Lock()##生成一把锁foriinrange(500):t=threading.Thread(target=run,args=(i,))t.start()p_list.append(t)foriinp_list:t.join()##等待线程都执行完再执行这个,但是共享的内存有可能出现问题,所有出现NUM不一定等于200,没有加锁导致的问题,这就涉及安全了print‘------>‘,NUM


Event

#_*_coding:utf-8_*___author__=‘jieli‘importthreading,timeimportrandomdeflight():ifnotevent.isSet():event.set()#wait就不阻塞#绿灯状态count=0whileTrue:ifcount<10:print‘\033[42;1m--greenlighton---\033[0m‘elifcount<13:print‘\033[43;1m--yellowlighton---\033[0m‘elifcount<20:ifevent.isSet():event.clear()#clearthegreenlight,switchontheredlightprint‘\033[41;1m--redlighton---\033[0m‘else:count=0event.set()#打开绿灯time.sleep(1)count+=1defcar(n):while1:time.sleep(random.randrange(3))ifevent.isSet():#绿灯print"car[%s]isrunning.."%nelse:#redlightprint"car[%s]iswaitingfortheredlight.."%nevent.wait()print"Greenlightison,car%sisrunning.............."%nif__name__==‘__main__‘:event=threading.Event()Light=threading.Thread(target=light)Light.start()foriinrange(3):t=threading.Thread(target=car,args=(i,))t.start()‘‘‘Events#Aneventisasimplesynchronizationobject;theeventrepresentsaninternalflag,andthreadscanwaitfortheflagtobeset,orsetorcleartheflagthemselves.event=threading.Event()#aclientthreadcanwaitfortheflagtobesetevent.wait()#aserverthreadcansetorresetitevent.set()event.clear()Iftheflagisset,thewaitmethoddoesn’tdoanything.Iftheflagiscleared,waitwillblockuntilitbecomessetagain.Anynumberofthreadsmaywaitforthesameevent.‘‘‘


lock


#_*_coding:utf-8_*___author__=‘jieli‘importthreading,timedefrun(n):time.sleep(0.5)globalnumlock.acquire()#申请锁并+锁num+=1lock.release()#释放锁if__name__==‘__main__‘:num=0lock=threading.Lock()foriinrange(1000):t=threading.Thread(target=run,args=(i,))t.start()whilethreading.active_count()!=1:printthreading.active_count()else:print‘----allthreadsdone---‘printnum



Rlock

#_*_coding:utf-8_*___author__=‘jieli‘importthreading,timedefrun1():print"grabthefirstpartdata"lock.acquire()globalnumnum+=1lock.release()returnnumdefrun2():print"grabthesecondpartdata"lock.acquire()globalnum2num2+=1lock.release()returnnum2defrun3():lock.acquire()res=run1()print‘--------betweenrun1andrun2-----‘res2=run2()lock.release()printres,res2if__name__==‘__main__‘:num,num2=0,0lock=threading.RLock()foriinrange(10):t=threading.Thread(target=run3)t.start()whilethreading.active_count()!=1:printthreading.active_count()else:print‘----allthreadsdone---‘printnum


semaphore
#_*_coding:utf-8_*___author__=‘jieli‘importthreading,timedefrun(n):semaphore.acquire()time.sleep(1)print"runthethread:%s\n"%nsemaphore.release()if__name__==‘__main__‘:num=0semaphore=threading.BoundedSemaphore(5)foriinrange(20):t=threading.Thread(target=run,args=(i,))t.start()whilethreading.active_count()!=1:pass#printthreading.active_count()else:print‘----allthreadsdone---‘printnum


本文出自 “奋斗吧” 博客,请务必保留此出处http://lvnian.blog.51cto.com/7155281/1852917

Python 多线程 threading

相关内容

    暂无相关文章

评论关闭