zoukankan      html  css  js  c++  java
  • 线程

    线程:

    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()解锁

  • 相关阅读:
    新概念第二册(1)--英语口语听力课1
    外企面试课程(一)---熟悉常见的缩略词
    公司 邮件 翻译 培训 长难句 结课
    workflow
    公司 邮件 翻译 培训 长难句 20
    公司 邮件 翻译 培训 长难句 19
    Engineering Management
    公司 邮件 翻译 培训 长难句 18
    公司 邮件 翻译 培训 长难句 17
    第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头
  • 原文地址:https://www.cnblogs.com/sike8/p/11151678.html
Copyright © 2011-2022 走看看