import threading
import time
defthinking():for i inrange(3):# threading.current_thread()查看当前正在运行的线程的名字print(str(threading.current_thread())+'am thinking')
time.sleep(1)defdrawing():for i inrange(3):print(str(threading.current_thread())+'am drawing')
time.sleep(1)defmain():
t1 = threading.Thread(target=thinking)
t2 = threading.Thread(target=drawing)# 开始执行线程
t1.start()
t2.start()# 查看当前的线程的数量print(threading.enumerate())
main()
如何使用类的方法引入多线程
必须将多线程代码写在run方法中
import threading
import time
classThinkingThread(threading.Thread):defrun(self):for i inrange(3):# threading.current_thread()查看当前正在运行的线程的名字print(str(threading.current_thread())+'am thinking')
time.sleep(1)classDrawingThread(threading.Thread):defrun(self):for i inrange(3):print(str(threading.current_thread())+'am drawing')
time.sleep(1)defmain():
t1 = ThinkingThread()
t2 = DrawingThread()
t1.start()
t2.start()
main()
在多线程共享访问全局变量时,会出现读脏数据的情况,需要引入锁机制:threading.Lock()
未引入锁机制
import threading
VALUE =0defadd_value():global VALUE
for i inrange(100000):
VALUE +=1print(VALUE)defmain():for i inrange(2):
t = threading.Thread(target=add_value)
t.start()
main()
输出:
100000153852
引入锁机制
import threading
VALUE =0
lock = threading.Lock()defadd_value():global VALUE
lock.acquire()for i inrange(100000):
VALUE +=1
lock.release()print(VALUE)defmain():for i inrange(2):
t = threading.Thread(target=add_value)
t.start()
main()
输出:
100000200000
import threading
import random
import time
ALL_MONEY =1000
conditon_lock = threading.Condition()
TIMES =0classProducer(threading.Thread):defrun(self):global ALL_MONEY
global TIMES
whileTrue:
TIMES = TIMES +1
conditon_lock.acquire()if TIMES >10:break
money = random.randint(1,1000)
ALL_MONEY = ALL_MONEY + money
print('{}生产了{}元,还剩于{}元'.format(threading.current_thread(), money, ALL_MONEY))
conditon_lock.notify_all()
conditon_lock.release()
time.sleep(1)classConsumer(threading.Thread):defrun(self):global ALL_MONEY
global TIMES
whileTrue:
money = random.randint(1,1000)
conditon_lock.acquire()while ALL_MONEY < money:if TIMES >=10:
conditon_lock.release()return
conditon_lock.wait()
ALL_MONEY = ALL_MONEY-money
print('{}消费了{}元,还剩于{}元'.format(threading.current_thread(), money, ALL_MONEY))
conditon_lock.release()defmain():for i inrange(5):
t = Producer(name="生产者{}".format(i))
t.start()for i inrange(3):
t = Consumer(name="消费者{}".format(i))
t.start()
main()
当python程序执行时会默认创建一个主线程,除了主线程之外我们还可以创建别的线程,可以使用threading引入:import threadingimport timedef thinking(): for i in range(3): # threading.current_thread()查看当前正在运行的线程的名字 print(str(t...