代码改变世界

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)