线程

Python多线程编程技巧
本文深入探讨Python中thread和threading模块的区别,强调threading模块的高级功能和优势,如守护线程支持和丰富的同步原语。通过实例演示如何使用threading模块创建和管理线程,以及多线程间的数据共享。
# python线程模块的选择
    #python提供了几个用于多线程编程的模块,包括thread、threading和Queue等。
        # thread和threading模块允许程序员创建和管理线程。
        # thread模块提供了基本的线程和锁的而支持,threading提供了更高级别、功能更强的线程管理功能
        # Queue模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构
    # 避免使用thread模块,因为更高级别的threading模块更为先进,对线程的支持更为完善,而且使用thread模块里的属性有可能会与threading出现冲突
        # 其次低级别的thread模块的同步原语很少(实际上只有一个),而threading有很多。
        # thread模块中当主线程结束时,所有的线程都会被强制关掉,没有警告也不会有正常的清除工作,至少threading模块能确保重要的子线程退出后进程才退出

        # thread模块不支持守护线程,当主线程退出时,所有的子线程不论他们是否还在工作,都会被强行退出。
        ## threading模块支持守护线程,守护线程一般时一个等待客户请求的服务器,如果没有客户提出请求它就在那等着。
        # 如果设定一个线程为守护线程,就表示这个线程是不重要的,在进程退出的时候,不用等待这个线程退出


#多线程并发的实验. 每个线程都结束了,主进程才会结束
# import time
# from threading import Thread
#
#
# def func(n):
#     time.sleep(1)
#     print(n)
#
# for i in range(10):
#     t = Thread(target=func, args=(i, )) # 创建线程对象,绑定子线程函数func,传递参数。  类似进程的操作
#     t.start()
# print('主线程执行完了')


# #多线程并发的实验. 自定义类启动线程的方法
# import time
# from threading import Thread
#
# class MyTread(Thread):
#     def __init__(self, arg):    # 想要接收参数,需要重写init,并且将父类的属性继承过来
#         super().__init__()
#         self.arg = arg
#
#     def run(self):
#         time.sleep(1)
#         print(self.arg)
#
# t = MyTread(5)
# t.start()
# print(22)
# t.join()    # 如果不执行这个,主线程会继续向下执行,主线程执行完了后程序不会退出,必须等待所有子线程执行结束程序才会退出。有了这句话会阻塞在这里等待子线程结束
# print('子线程执行完毕了')



# 同一个进程的多线程之间数据是共享的,子线程修改了当前进程的全局变量
import time
from threading import Thread


def func(n):
    global  g
    g = 0
    time.sleep(1)
    print(g)

g = 100
t_lst = []
for i in range(10):
    t = Thread(target=func, args=(i, )) # 创建线程对象,绑定子线程函数func,传递参数。  类似进程的操作
    t_lst.append(t)
    t.start()

for t in t_lst:
    t.join()

 

转载于:https://www.cnblogs.com/whylinux/p/9839876.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值