zoukankan      html  css  js  c++  java
  • 学习日记0906 进程间通信(IPC机制) 消费者生产者模型 线程的基本理论

    进程间通信IPC机制  

      

    from multiprocessing import Queue
    
    p= Queue()
    p.put('123')
    p.put('456')
    print(p.get())
    print(p.get())

      IPC机制用白话讲其实就是开辟了一个公共的内存空间,由于进程在内存中是隔离,所以开辟了这个空间以后我们就可以在进程间进行通信了,这个空间我们俗称为管道

    生产者与消费者模型

      该模型的原理非常的简单:就是两个进程这间通过IPC机制进行通信,并且保证这两个进程是并发的

    简单的生产者与消费者模型:

    from multiprocessing import Process,JoinableQueue

    def producer(name,p):
    for i in range(10):
    msg = '%s %s' %(name,i)
    p.put(msg)
    print('生产者生产了%s' % (msg))

    def consumer(name,p):
    while True:
    msg = p.get()
    print("消费者%s 消费了%s" % (name, msg))
    p.task_done()

    if __name__ == '__main__':
    p = JoinableQueue()
    pro = Process(target=producer,args=('a',p))
    cons = Process(target=consumer,args=('xfz',p))
    pro.start()
    cons.start()
    pro.join()
    cons.join()
    p.join()
    print('主进程')

    开启线程的两种方式:

    方式一:

      

    from threading import Thread
    
    def task():
        print('线程已经开启!')
    
    
    if __name__ == '__main__':
        ta = Thread(target=task)
        ta.start()
        print('主线程!')

    方式二(开启线程时与开启进程是相似,就是调用Thread下的run方法):

    from threading import Thread
    
    class Mythread(Thread):
        def run(self):
            print('线程已经开启!')
    
    
    if __name__ == '__main__':
        t= Mythread()
        t.start()
        print('zhu')

    线程的特性

      在此简单的介绍一下进程的几种内置方法:

        .join()(等待子线程运行结束之后再运行主线程相当于等待)

        os.getpid()(得到线程的pid)

        active_count()(获取当前线程数)

    守护线程

      

    from threading import Thread
    from multiprocessing import Process
    import time
    def foo():
        print(123)
        time.sleep(1)
        print("end123")
    
    def bar():
        print(456)
        time.sleep(3)
        print("end456")
    
    if __name__ == '__main__':
        # t1=Thread(target=foo)
        # t2=Thread(target=bar)
    
        t1=Process(target=foo)
        t2=Process(target=bar)
        t1.daemon=True
        t1.start()
        t2.start()
        print("main-------")

    线程互斥锁

    from threading import Thread,Lock
    
    n = 100
    mutex = Lock()
    def task():
        global n
        with mutex:
            t = n
            # time.sleep(0.01)
            n = t-1
    
    if __name__ == '__main__':
        t_l = []
        for i in range(100):
            t= Thread(target=task)
            t_l.append(t)
            t.start()
        for i in t_l:
            i.join()
    
        print(n)
  • 相关阅读:
    怎样理解HTMLCollection接口
    怎样单独遍历NodeList的键、值和键值对
    怎样获取NodeList某位置上的节点
    怎样遍历NodeList对象
    怎样理解NodeList的动态集合与静态集合
    怎样将类似数组的对象转换为数组
    怎样理解 instanceof
    怎样清理当前节点下的所有文本节点
    怎样移除当前节点
    怎样判断一个节点是否相等 / 是否相同
  • 原文地址:https://www.cnblogs.com/jianhaozhou/p/9598901.html
Copyright © 2011-2022 走看看