python线程

本文探讨了计算机进程和线程的概念,特别是Python中的线程使用。通过实例代码介绍了如何利用threading模块创建和管理线程,以实现程序的并发执行。
摘要由CSDN通过智能技术生成

说一下线程吧,计算机的进程估计大家都知道,就是一个一个运行着的程序,而每一个进程都最少有一个线程多线程就是同时运行多个线程还是看代码吧,这一块感觉不是很好说清楚
首先说下调用线程的模块threading,还是看代码吧,先说一个最基本的

import threading
from time import sleep
print('主线程开始')
def thread1():
    print('我是线程1')
    sleep(5)
    print('线程1结束')
def thread2():
    print('我是线程2')
    sleep(2)
    print('线程2结束')
t1 = threading.Thread(target=thread1)#target=thread1,是函数的入口,但是线程还没有开始
t2 = threading.Thread(target=thread2)
t1.start()#此时线程开始
t2.start()
t1.join()#此时主函数要等到子线程执行结束才能走主线程
t2.join()
sleep(1)
print('主线程结束')
这个如果能看明白那么再说一个带参数的
'''print('主线程开始')
def thread1(a,b):
    print('我是线程1')
    m = a + b
    sleep(5)
    print('线程1结束a+b的值是:',m)
def thread2(c,d):
    print('我是线程2')
    n = c * d
    sleep(2)
    print('线程2结束c * d的值是:',n)
t1 = threading.Thread(target=thread1,args=(3,5))#target=thread1,是函数的入口,但是线程还没有开始
t2 = threading.Thread(target=thread2,args=(5,3))#之所以传参用的是数组是因为Thread模块中这个地方是形参,
# 且是数值是数组,可以用Ctrl+鼠标左键查看该函数,所以要用数组,如果是一个参数时,一个参数后面要加逗号
t1.start()#此时线程开始
t2.start()
t1.join()#此时主函数要等到子线程执行结束才能走主线程
t2.join()
sleep(1)
print('主线程结束')
再看一下加锁的线程,这种情况是在两个函数共同调用一个公共资源时防止冲突时所采取的的措施,还是看代码
print('主线程开始')
#假设a 的钱一共有100,吃饭花了10,同时工作挣了5,问此时a的钱为多少
dic1 = {'a':100}
#使用Lock函数,返回一个锁对象,这是这个共享资源会被锁住
zhifubao_lock = threading.Lock()

def thread1(b):
    print('我是线程1')
    # 在代码访问共享对象之前加锁
    # 当多个线程同时执行Lock.qcquire()时
    # 只有一个线程能够成功的获取锁,然后继续执行代码
    # 其他线程就继续等待,知道获得锁为止
    zhifubao_lock.acquire()
    dic1['a'] = dic1['a'] + b
    # 访问完共享对象,释放锁
    # 访问结束后,一定要调用Lock对象的release方法,进行解锁操作
    # 否则其他等待锁的线程将永远等待下去,成为死程序
    # 如果不释放相当于一个人上厕所之后门一直关着,下一个人是没有办法进去的
    sleep(1)
    print('线程1结束a的值是:',dic1['a'])
    zhifubao_lock.release()
def thread2(d):
    print('我是线程2')
    zhifubao_lock.acquire()
    dic1['a'] = dic1['a'] - d
    sleep(2)
    print('线程2结束a的值是:',dic1['a'])
    zhifubao_lock.release()
t1 = threading.Thread(target=thread1,args=(1,))#target=thread1,是函数的入口,但是线程还没有开始
t2 = threading.Thread(target=thread2,args=(10,))#之所以传参用的是数组是因为Thread模块中这个地方是形参,
# 且是数值是数组,可以用Ctrl+鼠标左键查看该函数,所以要用数组,如果是一个参数时,一个参数后面要加逗号
t1.start()#此时线程开始
t2.start()
t1.join()#此时主函数要等到子线程执行结束才能走主线程
t2.join()
sleep(1)
print('主线程结束a的值是:',dic1['a'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhaoXuWen23

你的鼓励是我的动力,持续更新中

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值