zoukankan      html  css  js  c++  java
  • python进程开启的两种方式

    一、进程

    1.1、方式一

    from multiprocessing import Process
    import time
    
    #方式一
    def task(name):
        print(f"my name is {name},启动时间")
        time.sleep(2)
        print(f"my name is {name},停止时间")
    
    if __name__ == '__main__':
        # 1 创建一个对象
        p = Process(target=task, args=('jason',))
        # 容器类型哪怕里面只有1个元素 建议要用逗号隔开 args=('jason',)
        # 2 开启进程
        p.start()  # 告诉操作系统帮你创建一个进程  异步
        print('主进程')
    '''
    Windows操作系统下,创建进程一定要在main中创建
    因为Windows下创建的进程类似于模块导入的方式
    代码会从上往下依次执行
    '''
    

    1.2、方式二

    class MyProcess(Process):
        def run(self):
            print('hello bf girl')
            time.sleep(1)
            print('get out!')
    
    
    if __name__ == '__main__':
        p = MyProcess()
        p.start()
        print('主进程')
    

    总结:

    • 创建进程就是在内存中申请一块内存空间将需要运行的代码丢进去
    • 一个进程对应在内存中就是一块独立的内存空间
    • 多个进程对应在内存中就是多块独立的内存空间
    • 进程与进程之间数据默认情况下是无法直接交互,如果想交互可以借助于第三方工具、模块

    1.3、join方法

    • join是让主进程等待子进程代码运行结束之后,再继续运行。不影响其他子进程的执行
    from multiprocessing import Process
    import time
    
    
    def task(name, n):
        print('%s is running'%name)
        time.sleep(n)
        print('%s is over'%name)
    
    
    if __name__ == '__main__':
        # p1 = Process(target=task, args=('x', 1))
        # p2 = Process(target=task, args=('c', 2))
        # p3 = Process(target=task, args=('v', 3))
        # start_time = time.time()
        # p1.start()
        # p2.start()
        # p3.start()  # 仅仅是告诉操作系统要创建进程
        # p.join()  # 主进程等待子进程p运行结束之后再继续往后执行
        # p1.join()
        # p2.join()
        # p3.join()
        start_time = time.time()
        p_list = []
        for i in range(1, 4):
            p = Process(target=task, args=('子进程%s'%i, i))
            p.start()
            p_list.append(p)
        for p in p_list:
            p.join()
        print('主', time.time() - start_time)
    

    1.4、进程之间数据相互隔离

    from multiprocessing import Process
    money = 100
    def task():
        global money  # 局部修改全局
        money = 666
        print('子',money)
    if __name__ == '__main__':
        p = Process(target=task)
        p.start()
        p.join()
        print(money)
    
  • 相关阅读:
    (转)AJAX开发中常用的Firefox Plugins
    几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
    Excel Oledb设置
    统计数据库中所有表的基本信息
    sql 分页加排序等写法
    sql 创建索引
    SQL Server复制需要有实际的服务器名称才能连接到服务器 错误解决方案
    转转:解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系。"
    Reflector7.5.2.1的Bug
    查询数据库所有依赖
  • 原文地址:https://www.cnblogs.com/hsyw/p/13773877.html
Copyright © 2011-2022 走看看