Python基础之多线程

Python基础之多线程


1.进程与线程

进程:一个正在执行的程序,称为一个进程
线程:进程执行的最小单位,可以保证进程的正常执行。一个进程中至少含有一个线程,该线程称为主线程


2.Python中的线程

python中使用_threadthreading模块对线程进程处理。其中threading是对_thread的再次整合,所以在Python3中建议使用threading模块。

导入threading模块

import threading

获取主线程

# 获取主线程
print(threading.main_thread())
# <_MainThread(MainThread, started 5748)>启动状态

创建子线程

# 线程执行的方法
def sum_num(n):
    # 获取当前执行该任务的线程对象
    th = threading.currentThread()
    print("当前正在执行的线程名字为", th.name)
    sum_re = 0
    for i in range(n+1):
        sum_re += n
    print("求和结果:",sum_re)

# 创建子线程
# thread1 = Thread(target[绑定方法], args[参数列表(元组形式)],name[线程名称])
thread1 = Thread(target=sum_num, args=(1000000000,), name="thread1")

# 启动指定线程
thread1.start()

# setDaemon(True):如果设置为True,则是将该线程设置为主线程守护线程, 当主线程执行结束的时候,该线程不管任务是否完成都会被系统强制终止。thread1.setDaemon(True)的作用跟join的作用完全相反
thread1.setDaemon(True)

# join(timeout=time):设置主线程必须等待对应子线程的执行,等待指定的时间time之后,没如果子线程没有结果返回,主线程不再等待,继续执行。如果该时刻之内返回,主线程立刻继续执行,如果timeout设置为None(默认),此时主线程必须等待子线程运行结束才能执行
thread1.join(timeout=1)

3.锁(Lock)

当多个线程出现修改同一个公共资源的时候,为了防止多个线程同时争抢统一资源此时需要为给一个线程对应的操作执行上锁解锁任务
lock对象中内置两个方法,分别是acquirerelease,其中acquire()是获取锁的过程(上锁),release()是释放锁的过程(解锁),但是注意如果程序运行过程中某一个线程在调用acquire()上锁之后没有调用release()解锁,此时就会出现死锁现象,此时程序会进入阻塞状态

from threading import Thread
import threading
# 创建lock对象
lock = threading.Lock()
# 定义全局变量
count = 0
# 定义函数,完成对公共资源修改操作
def change(n):
    # 获取锁,并为当前线程上锁
    lock.acquire()
    global count
    count += n
    count -= n
    # 为当前线程释放锁
    lock.release()

# 定义函数完成对count进行n次修改
def target1(n):
    for i in range(n):
        change(i)

# 定义一个函数完成对count进行m次修改
def target2(m):
    for i in range(m):
        change(m)

# 创建两个子线程,分别完成target1任务和target2任务
thread1 = Thread(target=target1, args=(100,), name='thread1')
thread2 = Thread(t
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值