zoukankan      html  css  js  c++  java
  • 进程

    进程
    以一个整体的形式暴露给操作系统管理, 里面包含对各种资源的调用, 是资源的集合
    两个进程不能使用一块内存
    两个进程想要交互需要有一个中间代理
    创建新进程需要对其父进程进行一次克隆
    进程智能操作子进程

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    # -*- Author:Hinimix -*-
    
    import multiprocessing
    import threading
    
    
    def hnm_threa():
        print(threading.get_ident())
    
    def hnm_proce(name):
        print("from multiprocess %s" % name)
        t = threading.Thread(target=hnm_threa)
        t.start()
    
    for tmp in range(10):
        p = multiprocessing.Process(target=hnm_proce, args=(tmp,))
        p.start()
    
    

    进程Queue

    # import multiprocessing
    import threading
    from multiprocessing import Process, Queue  #进程Queue
    def hnm_proce(qq):
    
        qq.put([1, None, "hello"])
    
    q = Queue()
    
    for tmp in range(10):
        p = Process(target=hnm_proce, args=(q,))
        p.start()
    
    print(q.qsize())

     进程Pipe

    from multiprocessing import Process, Pipe 
    import time
    
    
    def hnm_proce(conn):
        conn.send([111, None, "from child 1"])
        conn.send([111, None, "from child 2"])
        time.sleep(.1)
        print("from parent")
        print(conn.recv())
        conn.close()
    
    parent_conn, child_conn = Pipe()
    
    if __name__ == '__main__':
        p = Process(target=hnm_proce, args=(child_conn,))
        p.start()
        print(parent_conn.recv())
        print(parent_conn.recv())
        parent_conn.send("from daddy")
        p.join()

     进程Manager

    from multiprocessing import Process, Manager  
    import os
    
    def f(d, l):
        d[os.getpid()] = os.getpid()
        l.append(os.getpid())
    
    if __name__ == '__main__':
        with Manager() as manager:
            d = manager.dict()      #生成字典,可在多个进程间共享传递
            l = manager.list(range(5))      #生成列表,可在多个进程间共享
            p_list = []
    
            for i in range(10):
                p = Process(target=f, args=(d,l))
                p.start()
                p_list.append(p)
    
            for res in p_list:
                res.join()
    
            print(d)
            print(l)

    进程锁

    from multiprocessing import Process, Lock
    
    
    def func(lock, num):    # 进程锁保证输出完整
        lock.acquire()
        try:
            print("hello %s" % num)
        finally:
            lock.release()
    
    
    if __name__ == '__main__':
        lock = Lock()
    
        for num in range(10):
            Process(target=func, args=(lock, num)).start()

    进程池

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    # -*- Author:Hinimix -*-
    
    # import multiprocessing
    import threading
    from multiprocessing import Process, Pool
    import time
    import os
    
    def Foo(i):
        print("in progress", os.getpid())
        time.sleep(1)
        return i+100
    
    def Bar(arg):
        print("exec done", arg, os.getpid())
    
    pool = Pool(processes=5)
    
    for i in range(10):
        # pool.apply(func=Foo, args=(i,))       #串行同步
        # pool.apply_async(func=Foo, args=(i,))   #并行异步
        pool.apply_async(func=Foo, args=(i,), callback=Bar)   #回调函数
    print("main pid ", os.getpid())
    print("end")
    pool.close()
    pool.join() #如果注释,程序就直接关闭了
  • 相关阅读:
    20 类中的函数重载
    19 友元的尴尬能力
    18 类的静态成员函数
    17 类的静态成员变量
    16 经典问题解析二
    15 临时对象
    Lucene4.6查询时完全跳过打分,提高查询效率的实现方式
    Lucene4.6 把时间信息写入倒排索引的Offset偏移量中,并实现按时间位置查询
    Lucene6去掉了Filter但是可以用BooleanQuery实现Filter查询
    Dom4j解析语音数据XML文档(注意ArrayList多次添加对象,会导致覆盖之前的对象)
  • 原文地址:https://www.cnblogs.com/hinimix/p/9167511.html
Copyright © 2011-2022 走看看