python笔记10-----(学习自清华大学出版社的python从入门到精通的配套视频)

python笔记----线程

线程:操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位
1.创建线程

1.1.threading模块类创建线程
Thread([group[,target[,name[,args[,kwargs]]]]])
例子:
import threading
import time
def thread():
for i in range(3):
time.sleep(1)
print(‘thread name is %s’ % threading.current_thread().name)
if name == ‘main’:
print(‘主线程开始’)
threads = [threading.Thread(target = thread) for i in range(4)]
for t in threads:
t.start()
for t in threads:
t.join()
print(‘主线程结束’)
1.2.使用Thread子类创建线程
例子:
from threading import Thread
import time
class SubThread(Thread):
def run(self):
for i in range(3):
time.sleep(1)
msg = “子线程” + self.name + "执行,i = " + str(i)
print(msg)
if name == ‘main’:
print(‘主线程开始’)
t1 = SubThread()
t2 = SubThread()
t1.start()
t2.start()
t1.join()
t2.join()
print(‘主线程结束’)
2.线程通信
2.1.给线程加互斥锁:threading.Lock()
2.2.互斥锁的使用
1.创建锁
mutex = threading.Lock()
2.锁定
mutex.acquire([blocking])
3.释放锁
mutex.release()
4.例子:使用互斥锁实现多人同时订购电影票功能
from threading import Thread,Lock
import time
n=100
def task():
global n
mutex.acquire()
time.sleep(0.1)
n -=1
print(“购买成功,剩余%d张电影票” %n)
mutex.release()
if name == ‘main’:
mutex = Lock()
t_1 = []
for i in range(10):
t = Thread(target = task)
t_1.append(t)
t.start()
for t in t_1:
t.join()
3.使用队列在线程间通信
例子:使用队列模拟生产者和消费者模式
from threading import Thread,Lock
from queue import Queue
import time
import random
class Producer(Thread):
def init(self,name,queue):
Thread.init(self,name = name)
self.data = queue
def run(self):
for i in range(5):
print(“生产者%s将产品%d加入队列” %(self.getName(),i))
self.data.put(i)
time.sleep(random.random())
print(“生产者%s完成!” %(self.getName()))
class Consumer(Thread):
def init(self,name,queue):
Thread.init(self,name = name)
self.data = queue
def run(self):
for i in range(5):
val = self.data.get()
print(“消费者%s将产品%d从队列中取出” %(self.getName(),val))
time.sleep(random.random())
print(“消费者%s完成!” %(self.getName()))
if name == ‘main’:
print(“主线程开始” )
queue = Queue()
producer = Producer(‘Producer’,queue)
consumer = Consumer (‘Consumer’,queue)
producer.start()
consumer.start()
producer.join()
consumer.join()
print(“主线程结束”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值