zoukankan      html  css  js  c++  java
  • python3 线程间通信

    python中Queue是消息队列,提供线程间通信机制,python3中重名为为queue

    Queue模块中的类:
    Queue(maxsize=0):创建一个FIFO队列,若给定最大值,队列没有空间时阻塞,否则是无限队列
    LifoQueue(maxsize=0):创建一个栈,maxsize含义同上
    PriorityQueue(maxsize=0):创建一个优先队列,maxsize含义同上

    Queue模块异常:
    Empty:对空队列调用get*()方法时抛出异常
    Full:对满队列调用put*()方法时抛出异常

    Queue对象方法:
    qsize():返回队列大小,是近似值(返回时可能队列大小被修改了)
    empty():判断队列是否为空
    full():判断队列是否为满
    put(item, block=True, timeout=None):将item加入队列,可选阻塞和阻塞时间
    put_nowait(item):即put(item, False)
    get(block=True, timeout=None):从队列中获取元素,可选阻塞和阻塞时间
    get_nowait():即get(False)
    task_done():用于表示队列中某个元素已经执行完成,会被join()调用
    join():队列中所有元素执行完毕并调用task_done()信号之前,保持阻塞

    一个使用Queue通信的例子:

    code

    import thread
    from time import sleep
    import threading
    from random import randrange
    from atexit import register
    from Queue import Queue
     
    def writeQ(queue):
        for i in range(100):
            tmp = queue.get(True)
            queue.put(tmp + 1, True)
     
    def readQ(queue):
        for i in range(100):
            tmp = queue.get(True)
            queue.put(tmp + 1, True)
     
    def main():
        q = Queue(32)
        q.put(0, True)
        threading.Thread(target=writeQ, args = (q,)).start()
        threading.Thread(target=readQ, args = (q,)).start()
        sleep(2)
        print q.get(True)
     
    if __name__ == '__main__':
        main()

  • 相关阅读:
    10003 Cutting Sticks(区间dp)
    Cocos2d-x init() 和 onEnter() 区别
    HDU1181【有向图的传递闭包】
    空间参考系统与WKT解析
    面试经典-分金条
    uvalive 3971
    lua学习:使用Lua处理游戏数据
    面试经典--两个房间 每间房间三盏灯
    浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并
    顺序队列之C++实现
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14057770.html
Copyright © 2011-2022 走看看