个人笔记——多任务之线程

本文探讨了Python中的线程概念,包括并行与并发的区别,使用threading模块创建和管理线程,以及如何处理多线程中的全局变量和资源竞争问题。通过示例展示了线程同步的重要性,包括互斥锁的应用,并提到了防止死锁的策略。最后,给出了一个多线程UDP聊天器的案例。
摘要由CSDN通过智能技术生成

线程

并行与并发

并行:真的多任务,多个程序同时执行
并发:假的多任务,快速在各个程序间切换

threading模块

python的threading模块是对thread做了一些包装,使其能够更加方便的被使用
例:

import time
import threading


def say_sorry():  # 子线程
    print("对不起")
    time.sleep(1)


if __name__ == '__main__':
    for i in range(5):
        t = threading.Thread(target=say_sorry)  # 注意函数名后面不要加()
        t.start()  # 主线程

查看线程数

如果给线程添加延时(即time.sleep),则程序的先后执行顺序无法确定
注:只有调用start()的时候才会创建线程
例1:添加延时,顺序执行

import threading
import time


def test1():
    for i in range(5):
        print("----test1----%d" % i)


def test2():
    for i in range(5):
        print("----test2----%d" % i)


def main():
    t1 = threading.Thread(target=test1)
    t2 = threading.Thread(target=test2)

    t1.start()
    time.sleep(0.1)
    print("-----1-----")
    t2.start()
    time.sleep(0.1)
    print("-----2-----")
    print(threading.enumerate())
    '''enumerate()方法用于查看当前正在运行的线程,
    因为此程序添加了延时,所以这是只会显示主程序的线程'''


if __name__ == "__main__":
    main()
>>[out]:
----test1----0
----test1----1
----test1----2
----test1----3
----test1----4
-----1-----
----test2----0
----test2----1
----test2----2
----test2----3
----test2----4
-----2-----
[<_MainThread(MainThread, started 14496)>]

例2:给主线程和子线程都设置延时,监控同时运行的线程数量,test1先运行完,对应线程也结束,等只剩下主线程运行时就结束

import threading
import time


def test1():
    for i in range(5):
        print("----test1----%d" % i)
        time.sleep(1)


def test2():
    for i in range(10):
        print("----test2----%d" % i)
        time.sleep(1)


def main():
    t1 = threading.Thread(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值