zoukankan      html  css  js  c++  java
  • python多进程

    python多进程学习笔记


    1.队列

    队列数据的存入与取出

    import multiprocessing
    import random
    import time
    
    class producer(multiprocessing.Process):
        def __init__(self,queue):
            multiprocessing.Process.__init__(self)
            self.queue=queue
    
        def run(self):
            for i in range(10):
                item=random.randint(0,256)
                self.queue.put(item)
                print('Process producer:item %d appended queue %s'%(item,self.queue))
                time.sleep(1)
                print('The size of queue is %s'%self.queue.qsize())
    
    
    class consumer ( multiprocessing.Process ):
        def __init__(self, queue):
            multiprocessing.Process.__init__ ( self )
            self.queue = queue
    
        def run(self):
            while True:
                if (self.queue.empty()):
                    print('queue is empty')
                    break
                else:
                    time.sleep(2)
                    #queue get method is popped from queue
                    item=self.queue.get()
                    print('Process consumer: item %d popped from by %s '%(item,self.name))
                    time.sleep(1)
    
    
    if __name__=='__main__':
        queue=multiprocessing.Queue()
        process_producer=producer(queue)
        process_consumer=consumer(queue)
        process_producer.start()
        process_consumer.start()
        process_producer.join()
        process_consumer.join()
    

    2.管道

    从一个管道的output段输出到另一个队列的input端

    import multiprocessing
    
    def create_item(pipe):
        output_pipe,_=pipe
        for item in range(10):
            output_pipe.send(item)
        output_pipe.close()
    
    
    def multiply_items(pipe_1,pipe_2):
        output,input_pipe=pipe_1
        output.close()
    
        output_pipe,_=pipe_2
        try:
            while True:
                item=input_pipe.recv()
                output_pipe.send(item**2)
        except EOFError:
            output_pipe.close()
    
    
    if __name__=='__main__':
    
        #first pipe with numbers from 0 to 9
        pipe_1=multiprocessing.Pipe(True)
        process_pipe_1=multiprocessing.Process(target=create_item,args=(pipe_1,))
        process_pipe_1.start()
    
        #second pipe
        pipe_2=multiprocessing.Pipe(True)
        process_pipe_2=multiprocessing.Process(target=multiply_items,args=(pipe_1,pipe_2,))
        process_pipe_2.start()
    
        pipe_1[0].close()
        pipe_2[0].close()
    
        try:
            while True:
                #print(pipe_1[1].recv())
                print('-----------------------')
                print(pipe_2[1].recv())
        except EOFError:
            print('End')
    

    3.端到端数据发送与接收

    from mpi4py import MPI
    
    #the task can communicate with each other
    comm=MPI.COMM_WORLD
    #to identify a task or processes inside the group ,we use the rank value
    rank=comm.Get_rank()
    
    print('my rabk is :',rank)
    
    if rank==0:
        data=10000
        destiantion_process=4
        comm.send(data,dest=destiantion_process)
        print('sending data %s :'%data+'to process %d'%destiantion_process)
    
    if rank==1:
        data='hello'
        destiantion_process=8
        comm.send(data,dest=destiantion_process)
        print('sending data %s :'%data+'to process %d'%destiantion_process)
    
    if rank==4:
        data=comm.recv(source=0)
        print('data received is= %s :'%data)
    
    if rank==8:
        data=comm.recv(source=1)
        print ( 'data received is= %s :' % data )
    

    输出

    C:Users杨景Desktopmultiprocess>mpiexec -n 9 python mpi.py
    my rabk is : 6
    my rabk is : 5
    my rabk is : 3
    my rabk is : 2
    my rabk is : 7
    my rabk is : 0
    sending data 10000 :to process 4
    my rabk is : 1
    sending data hello :to process 8
    my rabk is : 4
    data received is= 10000 :
    my rabk is : 8
    data received is= hello :
    
  • 相关阅读:
    5.2-5.3
    5.1封装
    阅读《构建之法》 5-7章
    做汉堡
    阅读《构建之法》1-5章
    结对 四则运算
    回答
    读后感
    提问*2
    提问1
  • 原文地址:https://www.cnblogs.com/yangjing000/p/10202874.html
Copyright © 2011-2022 走看看