• 线程


    线程:

    1、线程也是多任务编程的一种方法,可以使用计算机多核资源。是计算机核心分配的最小单、位

    2、线程又称为轻量级的进程,在创建和删除时消耗的计算机资源小

     

    线程和进程的关系:

    1、一个进程中可以包含多个线程

    2、进程中的所有线程,共享进程的空间资源(空间,全局变量,分配的内存等)

    3、线程也有自己的特有属性,比如 指令集  TID等

    创建线程

    import threading

    threading.Tread

    Thread()

    功能:创建线程

    参数:target 线程函数

       args  元组 给线程函数位置传参

       kwargs 字典 给线程函数字典传参

               name 给线程取名字(默认Thread-1)

    返回:线程对象

     t.start()     启动线程

    t.join(timeout)     回收线程

    t.is_alive()  查看线程状态

    t.name 查看线程名称

    threading.currentThread()  得到线程对象

    t.setName()设置线程名称

    t.daemon 属性

    默认 为false 主线程执行完毕,不会影响分支线程的执行

            如果设置为True,则主线执行完毕,其他线程也会终止

    t.isDaemon():判断daemon属性是true or false

    t.daemon=True

    t.setDaemon(True)

    import threading
    from time import sleep
    #线程函数
    def music():
        while True:
            sleep(3)
            print("线程播放")
    关联创建线程和函数MUSIC#
    t=threading.Thread(target=music)
    t.start()
    
    while True:
    
        sleep(2)
        print('主线程播放')
    #等待回收线程    
    t.join()    
    from threading import Thread,currentThread
    from time import sleep
    
    def fun(sec):
        print("线程属性测试")
        sleep(sec)
        print("%s线程结束"%currentThread().getName())
    
    thread=[]
    
    for i in range(3):
        t=Thread(name="t"+str(i),target=fun,args=(3,))    
        t.start()
        thread.append(t)
    for i in thread:
        print("thread name :",i.name)
        print("alive:",i.is_alive())
        i.join()    
    yangrui@ubuntu:~/num6$ python3 thread2.py 
    线程属性测试
    线程属性测试
    线程属性测试
    thread name : tedu0
    alive: True
    tedu0线程结束
    thread name : tedu1
    alive: True
    tedu1线程结束
    tedu2线程结束
    thread name : tedu2
    alive: False
    结果

    线程的通信;

    通过全局变量进行通信

    进程和线程的区别和联系:

    1、两者都是多任务编程方式,均可使用计算机的多核

    2、进程的创建要比线程消耗更多的资源

    3、进程空间独立,数据安全性更好操作,有专门的进程间通信方式

    4、线程使用全局变量通信,往往要和同步互斥机制配合,防止产生资源的争夺

    5、一个进程可以包含多个线程,线程共享进程资源

    6、进程线程都有自己的特有资源。

     使用场景:

    需要创建较多的并发,任务比较简单,线程比较合适;

    如果程序数据资源使用重叠较多,要考虑到线程锁是否需要更复杂的逻辑;

    如果多个任务并无什么关联性,不易用多线程,将其融入到一个进程中;

    (python线程并不使用用计算密集型并发)

    线程中同步互斥方法:

    Event 线程事件

    e=Event()

    e.wait()     e.set()       e.clear()

    Lock 线程锁

    lock=Lock() 创建锁

    lock.acquire()加锁

    lock.release()解锁

  • 相关阅读:
    django 定时任务 django-crontab 的使用
    Django中更新多个对象数据与删除对象的方法
    Django复制记录的方法
    Python中关于日期的计算总结
    django中添加日志功能
    Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
    根据后端传的时间前端js进行倒计时
    输入pip命令报错:from pip import main ImportError: cannot import name 'main'
    操作uwsgi命令
    关于linux下安装mysqlclient报 Failed building wheel for mysqlclient问题
  • 原文地址:https://www.cnblogs.com/sike8/p/11151678.html
Copyright © 2020-2023  润新知