zoukankan      html  css  js  c++  java
  • 多线程代码讲解

    threading模块介绍

    multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍

    官网链接:https://docs.python.org/3/library/threading.html?highlight=threading#

    开启多线程的两种方法

    方法1: 常用

    from threading import Thread
    
    def task():
        print('is running')
    if __name__=='__main__':
        t=Thread(target=task,)
        t.start() #开启线程的开销小,速度快 线程开启在进程里,基于当前进程的空间中开启线程
        print('')
    '''
    开启一个线程的打印结果: 依次打印
    is running
    主
    '''
    
    from multiprocessing import Process
    
    def task():
        print('is ruuing')
    if __name__=='__main__':
        p=Process(target=task,)
        p.start()#开启进程的开销大,速度慢,发送开启进程的指令给系统后,系统需要调用资源开启,需要时间,这时print打印操作已经执行
        print('')
    '''
    开启进程的打印结果:
    主
    is ruuing
    '''

    方法2:  不常用,也有人这么用

    from threading import Thread
    class Mythread(Thread):
        def run(self):
            print('is running')
    
    if __name__=='__main__':
        t=Mythread()
        t.start()
        print('')
    '''
    is running
    主
    '''

    在一个进程下开启多个线程与在一个进程下开启多个子进程的区别

    from threading import Thread
    class Mythread(Thread):
        def run(self):
            print('is running')
    
    if __name__=='__main__':
        t=Mythread()
        t.start()
        print('')
    '''
    is running
    主
    '''
    
    
    from threading import Thread
    from multiprocessing import Process
    import os
    
    def task():
        print('%s is running' %os.getpid())
    
    if __name__=='__main__':
        t1=Thread(target=task,)
        t2 = Thread(target=task, )
        t1.start()
        t2.start()
        print('',os.getpid())
    '''
    #都是在同一个进程中
    1884 is running
    1884 is running
    主 1884
    '''
    
    
    from threading import Thread
    from multiprocessing import Process
    import os
    
    def task():
        print('%s is running' %os.getpid())
    
    if __name__=='__main__':
        p1=Process(target=task,)
        p2 = Process(target=task, )
        p1.start()
        p2.start()
        print('',os.getpid())
    
    '''
    #主进程id和两个子进程id
    主 7816
    6452 is running
    8436 is running
    '''
    pid
    from threading import Thread
    from multiprocessing import Process
    
    n=100
    def work():
        global n
        n=0
    
    if __name__=='__main__':
        p=Process(target=work,)
        p.start()
        p.join()
        print('',n)
    '''
    主 100
    发现n并没有被修改  因为主进程是这个程序就run
    这个文件,子进程是p,只进程和子进程空间上完全独立
    创建子进程p的时候,子进程拷贝父进程的状态,里边也包括
    n=100,然后global n=0 修改的是子进程的全局变量,
    打印的n是父进程的全局变量,所以没有变
    
    '''
    
    from threading import Thread
    from multiprocessing import Process
    
    n=100
    def work():
        global n
        n=0
    
    if __name__=='__main__':
        t=Thread(target=work,)
        t.start()
        print('',n)
    '''
    主 0
    发现改变了  以为同一进程内的线程之间空间共享
    '''
    名称空间
  • 相关阅读:
    数30的小程序
    convert curl command into java HttpGet
    优秀技术文章转载备份 --- 变速原理
    用 c 调用 win-api 实现自动点击c# winform 程序 的按钮
    win 10 安装 glew 方法
    《想到什么更新什么系列》processing 性能优化
    processing 根据物体移动方向改变朝向
    openFrameworks 无法生成exe已经找不到dll的解决方案
    UE4 无法打开源文件“file_name.generated.h”(Cannot open source file name.generated.h)
    UE4 重新编译老版本的插件
  • 原文地址:https://www.cnblogs.com/lazyball/p/7476263.html
Copyright © 2011-2022 走看看