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('主线程')
    
  • 相关阅读:
    WPF 之 布局(一)
    CSS 之 内层div填充margin,外层div的背景色不会覆盖该margin
    T-SQL 之 多表联合更新
    jQuery
    Joomla, Wordpress, Drupal 全面详细Pk比较-转载
    js ==与===区别(两个等号与三个等号)
    Jquery DataTables 自定义布局sdom
    Jquery DataTable
    解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in
    firedebug调试Jquery
  • 原文地址:https://www.cnblogs.com/yunluo/p/11568635.html
Copyright © 2011-2022 走看看