zoukankan      html  css  js  c++  java
  • 多线程实现生产者消费者模型,以及线程和进程的回顾

    dd

    from multiprocessing import Pool,Queue
    import os
    import time
    
    from multiprocessing import Process
    
    from threading import Thread
    
    
    '''
    #进程池
    def run_proc():
        print(os.getpid())
    
    
    if __name__ == "__main__":
    
        p = Pool(20)
    
        for i in range(10):
            p.apply_async(run_proc)
    
        print('processing is end...')
        p.close()
        p.join()
    '''
    
    
    '''
    #双进程
    def run_proc():
        print(os.getpid())
    
    if __name__=="__main__":
    
    
        for i in range(5):
    
            p = Process(target=run_proc())
            p.start()
            print('processing will start...')
    
            time.sleep(1)
        print(os.getpid())
        print(os.getppid())
        # p.start()
        # p.join()
    '''
    
    
    '''
    #双进程间的内存共享
    def write(b):
        for i in ['chen','hang','wang','yadan','wust']:
            b.put(i)
            print('put %s to the queue'%i)
            time.sleep(1)
    
    def read(b):
    
        while True:
            values = b.get()
            print('get %s from the queue'%values)
    
    
    if __name__=="__main__":
    
        q = Queue()
        pw = Process(target=write,args=(q,))
        pr = Process(target=read,args=(q,))
    
        pw.start()
        pr.start()
        pw.join()
    
        # pr.terminate()
    '''
    
    
    '''
    #双线程
    def run(i):
        print('%s is running...'%i)
    
    if __name__=="__main__":
        for i in range(5):
            t = Thread(target=run,args=(i,))
            t.start()
            t.join()
    '''
    
    '''
    #自定义线程类
    def bar():
        print('bar..')
    
    class MyThread(Thread):
    
        def run(self):
            Thread.run(self)                    #调用了父类的run方法
            print('lslsls')                     #如果没有这句,那么本类中的run方法和父类中的run方法一样
    
    t = MyThread(target=bar)
    t.start()
    t.join()
    '''
    
    
    #生产者和消费者模型:
    
    
    
    class Producer(Thread):
        def __init__(self,name,q):
            super(Producer,self).__init__()
            self.__name = name
            self.__q = q
    
        def run(self):
            while True:
                if self.__q.full():
                    time.sleep(1)
                else:
                    self.__q.put('baozi')
                    # Thread.run()
                    print('%s生产一个包子..'%self.__name)
    
    
    class Consumer(Thread):
        def __init__(self,name,q):
            super(Consumer,self).__init__()
            self.__name = name
            self.__q = q
    
        def run(self):
            while True:
                if self.__q.empty():
                    time.sleep(1)
                else:
                    # Thread.run()
                    print('%s吃一个包子'%self.__name)
    
    
    if __name__=="__main__":
    
        q = Queue(maxsize=20)
    
        for i in range(5):
            ii = 'chen%d'%i
            p = Producer(ii,q)
            p.start()
    
        for j in range(10):
            c = Consumer(i,q)
            c.start()

    dd

  • 相关阅读:
    短信编码总结
    在Linux下用C语言实现短信收发
    sshd_config配置详解
    SSH的通讯和认证
    linux安装tacacs+服务器
    Tacacs+认证详细调研
    伪分布配置完成启动jobtracker和tasktracker没有启动
    Hadoop学习记录(7)|Eclipse远程调试Hadoop
    Hadoop学习记录(6)|Eclipse安装Hadoop 插件
    Hadoop学习记录(5)|集群搭建|节点动态添加删除
  • 原文地址:https://www.cnblogs.com/hanggegege/p/5803937.html
Copyright © 2011-2022 走看看