2018.4.5学习笔记(线程)
2018-04-05 19:48 冒牌权限 阅读(102) 评论(0) 收藏 举报线程
#!/usr/bin/env python # -*- coding:utf-8 -*- import threading,time def func1(): print('fuck man\n') def func2(): time.sleep(10) func1() lock = threading.RLock()#实例化线程锁 def func3(): lock.acquire()#添加线程锁 pass lock.release()#释放线程锁 t = threading.Thread(target = func2) t.start() #t.join()#最多等待多少秒,参数可以为空 t = threading.Thread(target = func2) t.setDaemon(True)#主线程是否等待子线程,默认Fales等 t.start() t = threading.Thread(target = func2) t.start() print("it's over")
event
#!/usr/bin/env python # -*- coding:utf-8 -*- import threading,random li = ['fuck you','fuck us','fuck me','SB'] event_my = threading.Event()#实例化event def func(fuck): print('by fire be pruged\n') fuck.wait(3)#阻塞,标志位为True则放行,如果加参数,则表示阻塞多少秒,时间一到即使标志位未改变也放行 num = random.randrange(0, 4) print(li[num] + '\n') for i in range(4): obj = threading.Thread(target = func,args = (event_my,)) obj.start() #event_my.clear()#默认标志位为Fales while True: inp = input('>>>') if inp == 'go': event_my.set()#设置标志位为True break #队列--先进先出,栈--后进先出 import queue qu = queue.Queue(maxsize = 0)#指定长度,为0时,长度无限制 #qu.join()#当队列为空时(队列的值已经被取出应用),执行别的操作
进程池
#!/usr/bin/env python # -*- coding:utf-8 -*- #####进程池##### from multiprocessing import Process,Pool import time def Foo(i): time.sleep(2) return i+100 def Bar(arg):#回调函数 print(arg) if __name__ == '__main__': pool = Pool(5)#创建进程池,最多5个进程 #pool.apply(Foo,(1,))#申请一个进程,执行完后会自动放回进程池 for i in range(10): pool.apply_async(func = Foo,args = (i,),callback = Bar)#进程执行完后将返回值作为参数传给Bar,然后自动指定Bar pool.close()#关闭进程池 pool.join()
自定义lowb线程池
#!/usr/bin/env python # -*- coding:utf-8 -*- #####lowb线程池##### import threading,queue,time class threading_pool(object): def __init__(self,zuiduo = 10): self.queue = queue.Queue(zuiduo) for i in range(zuiduo): self.queue.put(threading.Thread) def threading_get(self): return self.queue.get() def threading_put(self): self.queue.put(threading.Thread)
浙公网安备 33010602011771号