美文网首页
python 进程,队列

python 进程,队列

作者: 小姐姐催我改备注 | 来源:发表于2019-05-05 11:19 被阅读0次

    1.进程,队列

    在python中虽然不能发挥多线程的优势,但是对于tensorflow中,多线程任务,我们可以写多个线程来执行。下面介绍两个函数,Queue(),Process()

    2.Queue()

    先来介绍这个函数的属性,和方法,以及对应的使用。

    index = queue(maxsize=n) 
    这里定义队列的数量。
    __getstate__
    __setstate__
    _after_fork
    这是几个内置函数的方法,暂时不知道有什么作用。
    
    def put(self, obj, block=True, timeout=None):
    放入数据到队列中去,
    Block值默认为True,代表当队列已满时,会阻塞。如果block为False,则队列满会报异常Queue.Full
    timeout表示会阻塞到指定时间,直到有剩余的空间供插入,如果时间超时,则报异常Queue.Full
    
    def get(self, block=True, timeout=None):
    Block值默认为True,代表当队列为空时,会阻塞。如果block为False,则队列空会报异常Queue.Empty
    timeout表示会等待到指定时间,直到取出数据,如果时间超时,则报异常Queue.Empty
    
    def qsize(self):
    判断队列是否为空,如果空返回True
    
    def empty(self):
    判断队列是否已满,如果满返回True
    
    def full(self):
    判断队列是否已满,如果满返回True
    
    def get_nowait(self):
    相当于get()  block = False
     
    def put_nowait(self, obj):
    相当于 put() block = False
    
    def close(self):
    进程池不再创建新的进程
    
    def join_thread(self):
    
    def cancel_join_thread(self):
    

    3.Process()

    进程函数的方法及其属性

    precess .daemon
    p.daemon = True -->守护进程,守护进程不可以再有子进程,并且主进程死守护进程就死,要写在p.start()之前
    
    p.join() ---> 主进程等子进程执行完 之后再结束
    
    p.terminate()-->强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,用该方法需要特别小心这种情况。如果p保存了一个锁那么也将不会被释放,进而导致死锁
    
    p.is_alive() -->如果p仍然运行,返回True
    
    p.name -->查看进程的名称
    
    p.pid  -->查看进程的pid
    
    p.start()
    start() 方法是启动一个子线程,线程名就是自己定义的name。
    
    p.run()
    run() 方法并不启动一个新线程,就是在主线程中调用了一个普通函数而已。
    

    4.进程的锁机制以及调用机制(生产者和消费者模式)

    同步锁:进程的锁机制就是,对一个对象,我们用不同进程来访问的时候回造成资源的竞争,因此我们需要对对象加上锁的机制,当一个进程访问的时候,我们需要别的进程在等待。

    死锁:在竞争资源的时候,有时候那个进程相互等待就造成了死锁现象。还有就是,进程在获取资源后,并没有释放锁然后终止了,这样就造成了,资源一直被占用。

    生产者和消费者模式:


    这里解决的问题就是用一个容器来解平衡数据的入队,和数据出队之间的关系。

    相关文章

      网友评论

          本文标题:python 进程,队列

          本文链接:https://www.haomeiwen.com/subject/dzfcoqtx.html