• 进程


    什么是进程?

    cpu分配资源的最小单元,一个进程可以有多个线程,进程间数据默认是不共享的,进程也是有GIL锁

    进程的编写

    # 方式一
    import multiprocessing
    
    lst = []
    def func(arg):
        lst.append(arg)
        print(lst)
    
    if __name__ == '__main__': #这句只有在windos系统中需要写,而在linux和mac中是不需要的
        for i in range(10):
            t = multiprocessing.Process(target=func,args=(i,))
            t.start()
    # 方式二
    class MyProcess(multiprocessing.Process):
    
        def run(self):
            print('当前进程',multiprocessing.current_process())
    
    
    def run():
        p1 = MyProcess()
        p1.start()
    
    if __name__ == '__main__':
        run()

    共享数据

    虽然进程之间本质数据是不共享的,但也可以通过一些方法也能获取到不同进程的数据

    multiprocessing.Queue

    import multiprocessing
    
    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)
    if __name__ == "__main__":
        run()

    Manager

    import time
    import multiprocessing
    
    def task(arg):
        time.sleep(2)
        print(arg)
    
    
    if __name__ == '__main__':
        m = multiprocessing.Manager()
    
        process_list = []
        for i in range(10):
            p = multiprocessing.Process(target=task, args=(i,))
            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

    连接其他电脑数据共享

    import multiprocessing
    
    def task(arg):
        pass
    
    if __name__ == '__main__':
        while True:
            # 连接上指定的服务器
            # 去机器上获取url
            url = 'adfasdf'
            p = multiprocessing.Process(target=task, args=(url,))
            p.start()

    进程锁

    详见线程锁:https://www.cnblogs.com/--kai/p/9629264.html

    进程池

    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)
  • 相关阅读:
    Android ANR异常解决方案
    数据结构之斐波那契查找
    数据结构之插值查找
    数据结构之折半查找
    Android Task 任务
    java中“==”号的运用
    php中向前台js中传送一个二维数组
    array_unique和array_flip 实现去重间的区别
    js new Date() 获取时间
    手机端html5触屏事件(touch事件)
  • 原文地址:https://www.cnblogs.com/--kai/p/9635627.html
Copyright © 2020-2023  润新知