进程间通信及线程间通信

进程队列

进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的

创建队列的类

from multiprocessing import Queue

创建实例

obj=Queue(n) #n是队列中允许最大项数,省略则无大小限制。根据硬件设置

代码

from multiprocessing import Queue #进程队列

q=Queue(3)

q.put({'a':1}) #存数据
q.put('xxxxx')
q.put(3)

print(q.get()) #拿数据
print(q.get())
print(q.get())
#结果
#{'a': 1}
#xxxxx
#3
#如果你在一个线程中put+get。并且put次数超过队列项数就会等待,get次数超过put次数也会等待

线程队列

queue队列 :使用import queue,用法与进程Queue一样

队列

q=queue.Queue(3)
q.put({'a':1})
q.put('xxxxx')
q.put(3)

print(q.get())
print(q.get())
print(q.get())
# 运行结果
#{'a': 1}
#xxxxx
#3

优先级队列

q=queue.PriorityQueue(3) #创建PriorityQueue对象
q.put((-1,'xxxxx')) #放数据时要放带序号的元组,且序号越小优先级越高
q.put((0,3))

print(q.get())
print(q.get())
print(q.get())
#结果
#(-1, 'xxxxx')
#(0, 3)
#(10, {'a': 1})

堆栈

q=queue.LifoQueue(3) #创建LifoQueue对象
q.put({'a':1})
q.put('xxxxx')
q.put(3)

print(q.get())
print(q.get())
print(q.get())
#结果 - 后进先出
#3
#xxxxx
#{'a': 1}

 

posted @ 2017-12-04 19:45  瓜田月夜  阅读(75)  评论(0)    收藏  举报