zoukankan      html  css  js  c++  java
  • 进程简单了解和使用

    1. 进程
            - 进程间数据不共享
                data_list = []
                def task(arg):
                    data_list.append(arg)
                    print(data_list)
    
    
                def run():
                    for i in range(10):
                        p = multiprocessing.Process(target=task,args=(i,))
                        # p = threading.Thread(target=task,args=(i,))
                        p.start()
    
                if __name__ == '__main__':
                    run()
            - 常用功能: 
                - join
                - deamon
                - name
                - multiprocessing.current_process()
                - multiprocessing.current_process().ident/pid
            
            - 类继承方式创建进程
                class MyProcess(multiprocessing.Process):
    
                    def run(self):
                        print('当前进程',multiprocessing.current_process())
    
    
                    def run():
                        p1 = MyProcess()
                        p1.start()
    
                        p2 = MyProcess()
                        p2.start()
    
                if __name__ == '__main__':
                    run()
                    
        2. 进程间数据共享
            Queue:
                linux:
                    q = multiprocessing.Queue()
    
                    def task(arg,q):
                        q.put(arg)
    
                    def run():
                        for i in range(10):
                            p = multiprocessing.Process(target=task, args=(i, q,))
                            p.start()
    
                        while True:
                            v = q.get()
                            print(v)
    
                    run()
                windows:    
                    def task(arg,q):
                        q.put(arg)
    
                    if __name__ == '__main__':
                        q = multiprocessing.Queue()
                        for i in range(10):
                            p = multiprocessing.Process(target=task,args=(i,q,))
                            p.start()
                        while True:
                            v = q.get()
                            print(v)
        
            Manager:(*)
                Linux:
                    m = multiprocessing.Manager()
                    dic = m.dict()
    
                    def task(arg):
                        dic[arg] = 100
    
                    def run():
                        for i in range(10):
                            p = multiprocessing.Process(target=task, args=(i,))
                            p.start()
    
                        input('>>>')
                        print(dic.values())
                        
                    if __name__ == '__main__':
                        
                        run()
                windows:
                    def task(arg,dic):
                        time.sleep(2)
                        dic[arg] = 100
    
                    if __name__ == '__main__':
                        m = multiprocessing.Manager()
                        dic = m.dict()
    
                        process_list = []
                        for i in range(10):
                            p = multiprocessing.Process(target=task, args=(i,dic,))
                            p.start()
    
                            process_list.append(p)
    
                        while True:
                            count = 0
                            for p in process_list:
                                if not p.is_alive():
                                    count += 1
                            if count == len(process_list):
                                break
                        print(dic)
        
        3. 进程锁 
                import time
                import threading
                import multiprocessing
    
    
                lock = multiprocessing.RLock()
    
                def task(arg):
                    print('鬼子来了')
                    lock.acquire()
                    time.sleep(2)
                    print(arg)
                    lock.release()
    
                if __name__ == '__main__':
                    p1 = multiprocessing.Process(target=task,args=(1,))
                    p1.start()
    
                    p2 = multiprocessing.Process(target=task, args=(2,))
                    p2.start()
        
            为什么要加锁?
        
        4. 进程池
            import time
            from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    
            def task(arg):
                time.sleep(2)
                print(arg)
    
            if __name__ == '__main__':
    
                pool = ProcessPoolExecutor(5)
                for i in range(10):
                    pool.submit(task,i)
  • 相关阅读:
    css实现截取文本
    ob_clean()解决php验证码图片无法显示
    JS获取url参数,修改url参数
    mysql模糊查询特殊字符(\,%和_)处理
    apache反向代理和监听多个端口设置
    页面底部自适应浏览器窗口高度
    变量相关考虑
    php非法输入数据类型
    php socket模拟http中post或get提交数据
    华为专利的 hybrid 端口
  • 原文地址:https://www.cnblogs.com/zzy7372/p/9635584.html
Copyright © 2011-2022 走看看