zoukankan      html  css  js  c++  java
  • 线程

    线程

    进程:资源单位

    线程运行 = 代码运行

    进程运行 = 各种资源 + 线程

    进程和线程的区别

    线程 ---> 代码的执行和结束

    进程 ---> 资源的申请和销毁

    进程内存空间彼此隔离

    同一个进程下的线程共享资源

    进程和线程的创建速度

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

    开启进程的两种方式

    方式一

    import 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 MyThread(Thread):
        def run(self):
            print('线程 start')
            time.sleep(2)
            print('线程 end')
            
    if __name__ == '__main__':
        t = MyThread()
        t.start()
        print('主线程')
    

    子线程和子进程创建速度的比较

    子线程

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

    子进程

    from multiprocessing import Process
    import time
    
    def task():
        print('子进程 start')
        time.sleep(3)
        print('子进程 end')
        
    if __name__ == '__main__':
        p = Process(target=task)
        p.start()
        print('子进程')
        
    # 子进程
    # 子进程 start
    # 子进程 end
    

    线程资源共享

    from threading import Thread
    import os
    import time
    
    x = 100
    def task():
        global x
        x = 50
        print(os.getpid())
        
    if __name__ == '__main__':
        t = Thread(target=task)
        t.start()
        time.sleep(2)
        print(x)
        print(os.getpid())
    

    线程的join方法

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

    守护线程

    守护线程:守护的是进程的运行周期

    from threading import Thread
    import time
    
    def task():
        print('守护线程 start')
        time.sleep(20)
        print('守护线程 end')
        
    def task2():
        print('子线程 start')
        time.sleep(5)
        print('子线程 end')
        
    if __name__ == '__main__':
        t1 = Thread(target=task)
        t2 = Thread(target=task2)
        t1.daemon = True
        t1.start()
        t2.start()
        print('主线程')
    
  • 相关阅读:
    记一次file_get_contents报failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request的错
    记一次centos7下配置服务器的过程
    locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录
    VM12虚拟机Centos7配置动态IP的网络设置
    记录下防御SSH爆破攻击的经验(CentOS7.3)
    第6次实践作业 17组
    第5次实践作业
    第3次实践作业
    第2次实践作业
    第1次实践作业
  • 原文地址:https://www.cnblogs.com/yunluo/p/11568635.html
Copyright © 2011-2022 走看看