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()

  • 相关阅读:
    平均值(Mean)、方差(Variance)、标准差(Standard Deviation) (转)
    4.3 使用 SQL 语句操作数据框
    4.2 数据框的行、列选择
    4.1 基本数据管理
    2.2.5 因子的使用
    Python执行时间的计算方法
    pypy安装与使用
    win7下查看进程端口
    python去除BOM头ufeff等特殊字符
    java查看线程的堆栈信息
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14057770.html
Copyright © 2011-2022 走看看