zoukankan      html  css  js  c++  java
  • Python随心记--进程调用

    进程调用
    from multiprocessing import Process
    import time
    
    def f(name):
        time.sleep(1)
        print('hello',name,time.ctime())
    
    if __name__ == '__main__':
        p_list = []
        for i in range(3):
    
            p = Process(target=f,args=('alive',))
            p_list.append(p)
            p.start()
        for i in p_list:
            p.join()
        print('end')
    from multiprocessing import Process
    import time
    
    class MyProcess(Process):
    
        # def __init__(self):
        #     super(MyProcess,self).__init__()
    
        def run(self):
            time.sleep(1)
            print('hello',self.name,time.ctime())
    
    if __name__ == '__main__':
        p_list = []
        for i in range(3):
            p = MyProcess()
            p.daemon = True   #守护进程
            p.start()
            p_list.append(p)
        # for i in p_list:
        #     p.join()
        print('end')
    from multiprocessing import Process
    import time,os
    
    def info(title):
        print('title:',title)
        print('parent process:',os.getppid())
        print('process id:',os.getpid())
    
    def f(name):
        info('function f')
        print('hello',name)
    
    if __name__ == '__main__':
        info('main process line')
        time.sleep(1)
        print('---------------')
        p = Process(target=info,args=('lin',))
        p.start()
        p.join()
    
    #is_alive
    from multiprocessing import Process
    import time
    
    class MyProcess(Process):
    
        def __init__(self,num):
            super(MyProcess,self).__init__()
            self.num = num
    
        def run(self):
            time.sleep(2)
            print(self.pid)
            print(self.is_alive())
            print(self.num)
    
    if __name__ == '__main__':
        p_list = []
        for i in range(10):
            p = MyProcess(i)
            p_list.append(p)
        for i in p_list:
            i.start()
    进程通讯
    Process([group[,target[,name[,args[,kwargs]]]]])
    group:线程组,目前还没实现,库引用中提示必须是None
    target:要执行的方法
    name:进程名
    args/kwargs:传入的参数
    实例方法
    #is_alive():返回进程是否在进行
    #join() 阻塞
    #start() 开启
    #run() start()调用run方法
    #terminate() 终止任务
    属性
    daemon
    ......
    队列通讯
    import multiprocessing
    import queue,time
    
    def foo(q):
        time.sleep(1)
        print(q(id))
        q.put(13)
        q.put('achun')
    
    if __name__ == '__main__':
        # q = queue.Queue()
        q = multiprocessing.Queue()
        p = multiprocessing.Process(target=foo,args=(q,))
    
        p.start()
        p.join()
    
        print(q.get())
        print(q.get())
        
    管道通信
    from multiprocessing import Process,Pipe
    
    def f(conn):
        conn.send([112,{'name':'lin'},'hello'])
        respones = conn.recv()
        print('respones',respones)
        conn.close()
        print('q_ID2:',id(conn))
    
    if __name__ == '__main__':
        parent_conn,child_conn = Pipe()   #双向管道
    
        print('q_ID2:', id(child_conn))
        p = Process(target=f,args=(child_conn,))
        p.start()
        print(parent_conn.recv())
        parent_conn.send('hello,hao are you')
        p.join()
    进程通信 资源(数据)共享
    from multiprocessing import Process,Manager
    
    def f(d,l,n):
        d[n] = '1'
        d['2'] = 2
        d[0,25] = None
        l.append(n)
    
    if __name__ == '__main__':
        with Manager() as manager:
            d = manager.dict()
            l = manager.list(range(5))
            print('main process:',id(d),id(l))
            p_list = []
            for i in range(10):
                p = Process(target=f,args=(d,l,i))
                p.start()
                p_list.append(p)
    
            for res in p_list:
                res.join()
    
            print(d)
            print(l)
    进程同步
    from multiprocessing import Process,Lock
    
    def f(l,i):
        with l:
            print('hello world %s ' %i)
    
    
    if __name__ == '__main__':
        lock = Lock()
    
        for num in range(10):
            Process(target=f,args=(lock,num)).start()
    进程池
    from multiprocessing import Process,Pool
    import time,os
    
    
    def Foo(i):
        time.sleep(1)
        print(i)
        return i+100
    
    def Bar(arg):
        print(os.getpid())
        print(os.getppid())
        print('logger:',arg)
    
    # Bar(1)
    if __name__ == '__main__':
        pool = Pool(5)  # 创建进程池对象(限制为5个)
        for i in range(100):
    
            # pool.apply(func = Foo,args = (i,))   #同步
            pool.apply_async(func = Foo,args = (i,),callback = Bar)   #异步
    
        pool.close()
        pool.join()
        print('ending...........')
    协程:协作式(协程是非抢占式的程序)----(生成器)(yield(协程))
    #优势1没有切换的消耗
    # 2没有锁的概念
    import time,queue
    
    def consumer(name):
        print('.................')
        while True:
            new_baozi = yield
            print('[%s] is eating baozi %s' %(name,new_baozi))
    
    
    def product():
        r = con.__next__()
        r = con2.__next__()
        n = 0
        while 1:
            time.sleep(1)
            print('33[32;1m[product]33[0m is making %s and %s' %(n,n+1))
            con.send(n)
            con2.send(n+1)
            n += 2
    
    if __name__ == '__main__':
        con = consumer('c1')
        con2 = consumer('c2')
        product()
    greenlet 自主切换执行顺序
    from greenlet import greenlet
    
    def test1():
        print(12)
        gr2.switch()
        print(34)
        gr2.switch()
    
    
    def test2():
        print(56)
        gr1.switch()
        print(78)
    
    
    gr1 = greenlet(test1)
    gr2 = greenlet(test2)
    gr2.switch()
    
    
    import gevent,request,time
    
    start = time.time()
    
    def f(url):
        print('GET:%s' %url)
        resp = request.get(url)
        data = resp.text
        print('%d bytes received from %s.' %(len(data),url))
    
    gevent.joinall([
        gevent.spawn(f,'https://www.python.org/'),
        gevent.spawn(f,'https://www.baidu.org/'),
        gevent.spawn(f,'https://www.Yutube.org/'),
    ])
    
    print('cost time:',time.time()- start)
  • 相关阅读:
    第二阶段每日总结10
    第二阶段每日总结09
    第二阶段每日总结08
    第二周总结站立会议07
    第二周总结站立会议06
    第二周总结站立会议05
    第二阶段站立会议04
    Beta阶段项目总结
    Alpha阶段项目总结
    软件说明书
  • 原文地址:https://www.cnblogs.com/Essaycode/p/10325243.html
Copyright © 2011-2022 走看看