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进行了修改,改变主进程里面的数据

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


    *****
    *****
  • 相关阅读:
    DOM基础
    9个实用的Javascript代码高亮脚本
    去掉超链接虚线框去掉chrome浏览器中input或textarea在得到焦点时出现黄色边框和取消可以拖动大小
    我的Gvim配置文件
    收集的一些有关UED的团队和个人博客
    JS函数:返回下一个元素节点而不是下一个节点
    分享一款图片导航效果 Animated Slideshow Navigation
    原生javascript写的Tab菜单(函数版)
    单个select语句实现MySQL查询统计次数
    mysql 语句case when
  • 原文地址:https://www.cnblogs.com/jevious/p/11403965.html
Copyright © 2011-2022 走看看