zoukankan      html  css  js  c++  java
  • 2019.09.17学习整理

    2019.09.17学习整理

    线程

    线程基础

    在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程,cpu真正的执行单位是线程

    右键运行:

    申请内存空间,先把解释器丢进去并且把代码丢进去(进程做的),运行代码(线程).

    进程和线程的区别:

    过程描述的区别

    线程==》单指代码的执行过程
    进程==》资源的申请与销毁的过程

    进程内存空间彼此隔离
    同一个进程下的线程共享资源.

    进程和线程的创建速度

    进程需要申请资源开辟空间 慢
    只是告诉操作系统一个执行方案 快

    线程的两种开启方式

    方式一

    from threading import Thread
    import time
    
    def task():
        print('线程 start')
        time.sleep(2)
        print('线程 end')
    
    
    if __name__ == '__main__':
        t=Thread(target=task)
        t.start()
        print('主线程')
    

    方式二

    from threading import Thread
    import time
    
    class MyT(Thread):
        def run(self) :
            print('子线程 start')
            time.sleep(2)
            print('子线程 end')
    
    
    t=MyT()
    t.start()
    print('主线程')
    

    线程vs进程

    打印效果

    rom threading import Thread
    from multiprocessing import Process
    import time
    
    def task(name):
        print(f'{name} is running')
        time.sleep(2)
        print(f'{name} is end')
    
    
    if __name__ == '__main__':
        t = Thread(target=task,args=('子线程',))
        p = Process(target=task,args=('子进程',))
        # t.start()
        p.start()
        print('主')
        
        
    开启子线程的打印效果:
    
    子线程 is running
    主
    子线程 is end
    
    开启子进程打印效果:
    
    主
    子进程 is running
    子进程 is end    
    

    进程和线程的创建速度

    开启子进程需要申请资源开辟空间 慢
    开启子线程只是告诉操作系统一个执行方案 快

    线程的join方法

    方法一

    from threading import Thread
    import time
    def task():
        print('子线程 start')
        time.sleep(2)
        print('子线程 end')
    
    t = Thread(target=task)
    t.start()
    t.join() # 等待子线程运行结束
    print('主线程')
    
    

    方法二单核下同一个进程的线程如何切换

    from threading import Thread
    import time
    def task(name,n):
        print(f'{name} start')
        time.sleep(n)
        print(f'{name} end')
    
    t1 = Thread(target=task,args=('线程1',1))
    t2 = Thread(target=task,args=('线程2',2))
    t3 = Thread(target=task,args=('线程3',3))
    start = time.time()
    t1.start()
    t2.start()
    t3.start()
    t1.join() # 111s
    t2.join() #
    t3.join()
    end = time.time() # 3.0039877891540527
    # 思考一下 在单核的情况下 多个线程是如何利用cpu的
    print(end-start)
    
    
    # print('主线程')
    
    

    线程的其他方法

    from threading import Thread,currentThread,enumerate,activeCount
    # import threading
    import time
    # threading.current_thread()
    # threading.current_thread()
    
    def task():
        print('子线程 start')
        time.sleep(2)
        print('子线程 end')
        print(enumerate())
        # print(currentThread(),'子线程')
    if __name__ == '__main__':
       t1 = Thread(target=task)
       t2 = Thread(target=task)
       t1.start()
       t2.start()
    
    
    
       # print(t1.is_alive()) # True
       # print(t1.getName()) # Thread-1
       # print(t2.getName()) # Thread-2
       # t1.setName('班长')
       # print(t1.getName())
       # print(currentThread().name)
       # print(enumerate()) # [<_MainThread(MainThread, started 1856)>, <Thread(Thread-1, started 6948)>, <Thread(Thread-2, started 3128)>]
       # print(activeCount()) # 3
       # print(len(enumerate())) # 3
    

    守护线程

    # 守护线程 守护的是进程的运行周期
    from threading import Thread,enumerate,currentThread
    import time
    
    def task():
        print('守护线程开始')
        print(currentThread())
        time.sleep(20)
        # print('守护线程结束')
    
    def task2():
        print('子线程 start')
        time.sleep(5)
        print(enumerate())
        print('子线程 end')
    
    if __name__ == '__main__':
        t1 = Thread(target=task)
        t2 = Thread(target=task2)
        t1.daemon = True
        t2.start()
        t1.start()
        print('主')
    
    
  • 相关阅读:
    调用GOOGLE的TTS实现文字转语音(XE7+小米2)(XE10.1+小米5)
    Android实例-设置消息提醒(XE8+小米2)
    FastReport二维码打印存在的问题
    一个DELPHI操作USB摄像头类
    利用Delphi编程控制摄像头(图)
    Delphi实现拍照控件的程序代码
    win dos命令行设置ip和dns
    daemontools管理fast-fail的zookeeper
    zookeeper定时清理log
    生成所有全排列 非递归和递归实现
  • 原文地址:https://www.cnblogs.com/zhangmingyong/p/11534624.html
Copyright © 2011-2022 走看看