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

    1.GIL

    在大多数系统上,python同时支持消息传递和基于线程的并发编程。但实际上python的线程受限很多,为了最大程度保护线程的安全,Python使用了全局解释器锁(Global Interpreter Lock),在任意指定时刻只允许单个线程运行。

    2.code

    import multiprocessing  
      
    def consumer(input_q):  
        while True:  
            #q.get()返回q中一个项,如果q为空,此方法将阻塞,直到队列中有项可用为止  
            item=input_q.get()  
            print(item)  
            #消费者使用此方法发出信号,表示q.get()返回的项已经被处理完毕。  
            input_q.task_done()  
              
    def producer(sequence,output_q):  
        for item in sequence:  
            #将项放入队列  
            output_q.put(item)  
              
      
    if __name__=='__main__':  
        q=multiprocessing.JoinableQueue()  
        '''''consumer processing'''  
        consumer_p=multiprocessing.Process(target=consumer,args=(q,))  
        consumer_p.daemon=True  
        consumer_p.start()  
          
          
        '''''producing many Queues,run producer'''  
        sequence=[1,2,3,4,5]  
        producer(sequence,q)  
        '''''waiting processing'''  
        q.join()
    

    JoinablQueue:调用方法multiprocess.JoinableQueue()
    创建可连接的共享进程队列。如同一个队列数据,通知一个队列另一个队列的完成情况。通知进程是使用共享的信号和条件变量实现的。
    在本实例中,首先使用producer 函数将处理项放入q=multiprocessing.JionableQueue()队列中 ,然后调用consumer函数,使用q.get()获取 队列,并发出信号通知生产者任务完成

  • 相关阅读:
    【构建工具】《Maven实战》读书笔记
    【网络安全】Dos攻击科普文
    谈谈集合.CopyOnWriteArrayList
    谈谈集合.List
    小程序开发--移动端分辨率与rpx
    跟面向对象卯上了,看看ES6的“类”
    捋一捋js面向对象的继承问题
    Canvas的drawImage方法使用
    浏览器内核趣对话
    “茴”字有四种写法,this也是一样
  • 原文地址:https://www.cnblogs.com/yangjing000/p/8205848.html
Copyright © 2011-2022 走看看