python25-线程2

105 阅读1分钟
import threading
def dem1():
    for i in range(10):
        print('aaaaaaaaa')
def dem2():
    for i in range(10):
        print('bbbbbbbbbbb')

t1 = threading.Thread(target=dem1)
t2 = threading.Thread(target=dem2)
l=[t1,t2]
for i in l:
    i.start()
    #i.join()
for s in l:
    s.join()
#任务:IO密集型
#计算机密集型
#对于IO密集型的任务:python的多线程是有意义的
#对于计算机密集型的任务:python的多线程不推荐,可以采用多进程+协程
import time
import threading

def addNum():
    global num #在每个线程中都获取这个全局变量
    #num-=1
    lock.acquire()
    temp=num
    #print('--get num:',num )
    time.sleep(0.1)
    num =temp-1 #对此公共变量进行-1操作
    lock.release()
num = 100  #设定一个共享变量
thread_list = []
lock = threading.Lock()
for i in range(100):
    t = threading.Thread(target=addNum)
    t.start()
    thread_list.append(t)

for t in thread_list: #等待所有线程执行完毕
    t.join()

print('final num:', num )
import threading
import time
class MyThread(threading.Thread):
    def actionA(self):
        r_lock.acquire()
        print(self.name,'gotA',time.ctime())
        time.sleep(2)
        r_lock.acquire()
        print(self.name, 'gotB', time.ctime())
        time.sleep(1)

        r_lock.release()
        r_lock.release()

    def actionB(self):
        r_lock.acquire()
        print(self.name, 'gotB', time.ctime())
        time.sleep(2)
        r_lock.acquire()
        print(self.name, 'gotA', time.ctime())
        time.sleep(1)

        r_lock.release()
        r_lock.release()

    def run(self):
        self.actionA()
        self.actionB()
if __name__ == '__main__':
    # A=threading.Lock()
    # B=threading.Lock()
    r_lock=threading.RLock()
    L=[]
    for i in range(5):
        t = MyThread()
        t.start()
        L.append(t)
    for i in L:
        i.join()
    print('end....................')
同步条件(Event)

import threading
import time
class Teacher(threading.Thread):
    def run(self):
        print(event.isSet)
        print('同学们下课!')
        event.set()
        time.sleep(5)

        print('放学吧')
        event.set()

class Students(threading.Thread):
    def run(self):
        event.wait()
        print('终于下课了')
        time.sleep(3)

        event.clear()
        event.wait()
        print('还没放学')


if __name__ == '__main__':
    event = threading.Event()

    list = []
    for i in range(5):
        list.append(Students())
    list.append(Teacher())
    for t in list:
        t.start()
    for t in list:
        t.join()
信号量
import threading,time
class MyThread(threading.Thread):
    def run(self):
        semaphore.acquire()
        print(self.name)
        time.sleep(2)
        semaphore.release()


if __name__ == '__main__':
    semaphore=threading.Semaphore(5)
    l = []
    for i in range(10):
        l.append(MyThread())
    for i in l:
        i.start()