zoukankan      html  css  js  c++  java
  • ~~并发编程(九):多线程与多进程~~

    进击のpython

    *****

    并发编程——多线程与多进程


    本小节就一个要求

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

    开始操作


    开启速度

    在主进程中开启线程

    from threading import Thread
    
    
    def work():
        print('hello')
    
    
    if __name__ == '__main__':
        for i in range(10):
            t = Thread(target=work)
            t.start()
        print('主线程/主进程')
            
    

    可以发现执行的很快

    在主进程中开启线进程

    from multiprocessing import Process
    
    
    def func():
        print('我是子进程')
        pass
    
    
    if __name__ == '__main__':
        for i in range(10):
            p = Process(target=func)
            p.start()
        print('主进程')
        
    

    相比较来说你会发现线程要更快

    其实一想也是,开十个进程相当于十个进程+十个线程

    那时间上指定要比十个线程要长


    pid

    在进程里查看pid

    import os
    from multiprocessing import Process
    
    
    def func():
        print('我是子进程', os.getpid())
        pass
    
    
    if __name__ == '__main__':
        for i in range(10):
            p = Process(target=func)
            p.start()
        print('主进程', os.getpid())
    
    

    我们可以看到,因为是新开的进程,所以每个进程的id都不同

    主进程 1516
    我是子进程 6800
    我是子进程 440
    我是子进程 1840
    我是子进程 7892
    我是子进程 228
    我是子进程 6464
    我是子进程 4628
    我是子进程 4944
    我是子进程 4244
    我是子进程 2300
    

    在线程里查看pid

    import os
    from threading import Thread
    
    
    def func():
        print('我是子进程', os.getpid())
        pass
    
    
    if __name__ == '__main__':
        for i in range(10):
            p = Thread(target=func)
            p.start()
        print('主进程', os.getpid())
    
    

    打印结果上可以看出,多线程的开启时基于一个进程开启

    我是子进程 11228
    我是子进程 11228
    我是子进程 11228
    我是子进程 11228
    我是子进程 11228
    我是子进程 11228
    我是子进程 11228
    我是子进程 11228
    我是子进程 11228
    我是子进程 11228
    主进程 11228
    

    数据共享

    进程的数据

    from multiprocessing import Process
    
    
    def work():
        global n
        n = 0
    
    
    if __name__ == '__main__':
        n = 100
        p = Process(target=work)
        p.start()
        p.join()
        print('主', n)
    
    

    可以看到打印结果是 100

    尽管在子进程里对全局变量中的n进行了修改,但是没有改变主进程里面的数据

    所以可以说明,在进程中,数据是不互通的

    线程的数据

    from threading import Thread
    
    
    def work():
        global n
        n = 0
    
    
    if __name__ == '__main__':
        n = 100
        p = Thread(target=work)
        p.start()
        p.join()
        print('主', n)
    
    

    可以看到打印结果是 0

    在子线程里对全局变量中的n进行了修改,改变主进程里面的数据

    所以可以说明,在线程中,数据是互通的


    *****
    *****
  • 相关阅读:
    电脑U盘启动制作
    windows系统使用
    CentOS升级Openssl至openssl-1.1.0
    PHP编译安装时常见错误解决办法
    阿里 Linux服务器外网无法连接MySQL解决方法
    centos 下 sphinx安装和配置
    集成百度编辑器 ueditor 后端配置项没有正常加载,上传插件不能正常使用!
    nginx 环境 thinkphp 隐藏index.php
    在 Linux 下搭建 Git 服务器
    MySQL远程连接不上的解决方法
  • 原文地址:https://www.cnblogs.com/jevious/p/11403965.html
Copyright © 2011-2022 走看看