zoukankan      html  css  js  c++  java
  • 进程

    什么是进程?

    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)
  • 相关阅读:
    Hessain 方法重载
    mac 类似Xshell
    idea & datagrip 注册码
    mac 安装mysql 修改密码
    securecrt 的安装
    datagrip的使用
    mac 安装oracle
    mac 安装mysql
    destoon 会员整合Ucenter/Discuz!/PHPWind教程
    destoon 深度整合discuz x2 UC 之免邮箱二次验证
  • 原文地址:https://www.cnblogs.com/--kai/p/9635627.html
Copyright © 2011-2022 走看看