• python3之进程


    1创建一个进程:

    import time
    import multiprocessing
    import os
    
    def text1():
        while True:
            print("111111111111")
            print(os.getpid(), os.getppid())
            time.sleep(1)
    
    def text2():
      while True:
        print("222222222222")
        print(os.getpid(), os.getppid())
        time.sleep(1)
    
    
    
    
    def main():
        # text1()
        # text2()
        print(os.getpid())   #进程的pid
        p1 = multiprocessing.Process(target=text1, )  #创建进程
        p2 = multiprocessing.Process(target=text2, )
        p1.start()   #执行进程
        p2.start()
    
    
    if __name__ == "__main__":
        main()
    

     2 进程与进程之间是不共享数据的,如果想实现进程之间的数据共享;需要Queue队列来实现:

    q = multiprocessing.Queue()   创建队列

    q.put()   向队列里面存放数据

    q.get()  从队列里面获取数据

    q.empty()   队列为空

    import multiprocessing
    import time
    
    nums = [11,22,33,44]
    def text1(q):
        nums.append(55)
        print(nums)
        for temp in nums:
            q.put(temp)
    
        while True:
            print("11111111")
            time.sleep(1)
    
    
    def text2(q):
        new_nums = []
        while True:
            data = q.get()
            new_nums.append(data)
            if q.empty():
                break
        print(new_nums)
        while True:
            print("222222222")
            time.sleep(1)
    
    
    
    def main():
        q = multiprocessing.Queue()   #创建队列
        """
        一个进程向Queue中写入数据,另外一个进程从Queue中获取数据,
        通过Queue完成了 多个需要配合的进程间的数据共享,从而能够 起到 解耦的作用
        """
        p1 = multiprocessing.Process(target=text1,args=(q, ))  #传递参数
        p2 = multiprocessing.Process(target=text2,args=(q, ))
    
        p1.start()
        p2.start()
    
    
    if __name__ == "__main__":
        main()
    

     3进程池:

    import multiprocessing
    import time, os, random
    
    
    def text(i):
        time_start = time.time()
        print("开始时间:%d" % time_start)
        print("%d 的进程:%d" %(i,os.getpid()))
        time.sleep(random.random()*2)
        time_end = time.time()
        print("执行耗时:%s" %(time_end - time_start))
    
    
    def main():
        po = multiprocessing.Pool(3)   #定义一个进程池,最大进程数为3
        for i in range(0,10):
            po.apply_async(text,(i,))  #向进程池中添加进程
    
        po.close()    #关闭进程池,
        po.join()    
    
    if __name__ == "__main__":
        main()
    
  • 相关阅读:
    Docker 命令自动补全?要的
    Windows 的这款工具,有时让我觉得 Mac 不是很香
    cheat.sh在手,天下我有
    妙用 Intellij IDEA 创建临时文件,Git 跟踪不到的那种
    AWS Lambda 借助 Serverless Framework,迅速起飞
    你说说对Java中SPI的理解吧
    你说一下对Java中的volatile的理解吧
    TCP 队列溢出了
    #未来时间思考
    #此平台不支持虚拟化的Intel VT-x/EPT #VMware Workstation 与 Device/Credential Guard 不兼容,且在禁用Device/Credential Guard后才能运行VMware
  • 原文地址:https://www.cnblogs.com/yan-peng/p/9971989.html
Copyright © 2020-2023  润新知