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)
  • 相关阅读:
    API测试之Postman使用完全指南(Postman教程,这篇文章就够了)
    asp.net的webservice
    表和索引的结构(笔记)
    基于Nginx+PHP+Redis的短URL系统的实现 新风宇宙
    数据结构与算法(php版) 新风宇宙
    discuz7.2 昵称替换用户名 新风宇宙
    gVim7.3(Vim7.3)文本编辑器详细配置文件和配色方案 新风宇宙
    Discuz的Memcache缓存实现 新风宇宙
    GitHub使用(二) 从代码库下载代码到本地 新风宇宙
    PHPredis中文文档 新风宇宙
  • 原文地址:https://www.cnblogs.com/zzy7372/p/9635584.html
Copyright © 2011-2022 走看看