Python多线程

进程和线程的概念

进程:在操作系统上运行着的程序

线程: 线程是操作系统创建的,用来控制代码执行的数据结构,线程是操作系统可识别的最小执行和调度单位,代码在线程里运行;

每个进程里至少包含一个线程,一个线程只能属于一个进程

一个进程可以有多个线程,但至少有一个线程。

 

多线程类似于同时执行多个不同程序,多线程运行有如下优点

  • 使用线程可以把占据长时间的程序中的任务放到后台去处理
  • 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
  • 程序的运行速度可能加快
  • 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等

 

线程库

代码通过系统调用,请求OS分配一个新的线程

在python里,threading库用来创建和管理线程

 

Threading

t1  = threading.Thread(target=函数对象)

多线程锁:在多个进程同时在操作共享资源时,需要创建进程锁,确保在同一时间只能有一个进程操作共享资源,比如余额宝里的金额,存钱和取钱不能多线程同时处理,必须等一个线程结束后另一个线程才能继续

import threading
from time import sleep

# 在代码访问共享对象之前,加锁
# 当多个线程同时执行lock.acquire()时,只有一个线程能成功地获锁,然后继续执行代码
# 其他代码就继续等待,直到获得锁为止

lock = threading.Lock()
print('Start your Test: ')

def hello(nsec):
    lock.acquire()      # 获取线程锁,锁定线程
    print('Hello World start ...')
    sleep(nsec)
    print('Hello World end')
    lock.release()      # 释放线程锁

def Hi(nsec):
    lock.acquire()
    print('Hi start ...')
    sleep(nsec)
    print('Hi end')
    lock.release()
# 访问结束,释放锁
# 访问结束后一定要调用Lock对象的release方法进行解锁,否则其他等待锁的线程将永远等待下去,成为死线程

t1 = threading.Thread(target=hello,args=(1,) )  #target=函数对象
t2 = threading.Thread(target=Hi,args=(2,))

# 开启新线程,才算是开始执行线程
t1.start()
t2.start()

# 等待t1结束线程
t1.join()
t2.join()

print('End your Test ') 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值