多线程

线程才是真正干活的人

多线程创建:

import threading
import time

def write():
    for i in range(10):
        print('执行write的线程对象',threading.current_thread())
        time.sleep(0.01)

def read():
    for i in range(10):
        print('执行read的线程对象',threading.current_thread())
        time.sleep(0.01)

if __name__ == '__main__':
    print('当前程序中,存在的线程列表--------',threading.enumerate())
    print('当前存活的线程个数---------------',threading.active_count())

    # 创建一个子线程
    wh = threading.Thread(target=write)
    rh = threading.Thread(target=read)
    print('当前程序中,存在的线程列表--------', threading.enumerate())
    print('当前存活的线程个数---------------', threading.active_count())
    # 开始启动线程
    wh.start()
    rh.start()
    print('当前程序中,存在的线程列表--------', threading.enumerate())
    print('当前存活的线程个数---------------', threading.active_count())
    # 线程的执行是无序的,由操作系统决定的

注意点:
1、多线程的执行,是无序的,由操作系统来实现
2、多线程的并发操作,节省时间
3、查看当前程序中,运行的线程threading.enumerate,返回的是线程列表, threading.active_count()返回的是线程的个数

重写多线程

import  threading

class MyThread(threading.Thread):
    def __init__(self,num):
        threading.Thread.__init__(self)
        self.num =num

    def run(self):
        print('当前调用run方法')
        self.num+=1
        print('在当前的线程中,获取的num的数据是',self.num)

if __name__ == '__main__':
    t1=MyThread(0)
    t2=MyThread(10)

    t1.start()
    t2.start()#在多线程开发中,全局变量是多个线程都共享的。而局部变量是各自线程的,不能共享

注意点:
1、run方法,不能改名字
2、一般情况下,我们把业务逻辑写在run方法里面
3、start方法用来启动线程,内部确实是直接调用的run方法
4、不能直接使用线程对象调用run方法,因为那样的调用可以实现函数,但是并没有真正的取启动线程

线程的注意点:
线程对于同一个资源的访问,如果没有控制得当,就会对于同一资源的数据进行破坏,而且线程的运行结果不可预料,像这种现象‘线程不安全’

互斥锁解决线程不安全问题,见下篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值