1.Python队列的基本示例


#!/usr/bin/env python
# -*- coding:utf-8 -*-

#Author:xp
#blog_url: http://blog.csdn.net/wuxingpu5/article/details/71209731

#多进程共享一套文件系统

# from multiprocessing import Process
# import time,random
#
# def work(filename,msg):
#     with open(filename,'a',encoding='utf-8') as f:
#         f.write(msg)
#
# if __name__ == '__main__':
#
#     for i in range(5):
#         p=Process(target=work,args=('a.txt','进程名%s'%(str(i))))
#         p.start()
# '''写入效果为随机的 可以看出是并发效果 '''

from multiprocessing import Process,Queue
q=Queue(3)
q.put({'a':1})
q.put('b')
q.put(3)
#q.put('d',False)   相同 报错提示已满  full
#q.put_nowait('d')
#q.put('d',timeout=2)    #超时时间

#q.put(4)  内部没有空间或者取空之后会一直等待
print(q.get())
print(q.get())
print(q.get())
# print(q.get(block=False))  #不等待,直接报错
# print(q.get_nowait())
# print(q.get(timeout=2))

q.put('d',False)

#判断空还是满 或者大小
print(q.full())
print(q.empty())
print(q.qsize())



2.Python队列实际应用 生产者消费者模型


#!/usr/bin/env python
# -*- coding:utf-8 -*-

#Author:xp
#blog_url: http://blog.csdn.net/wuxingpu5/article/details/71209731

from multiprocessing import Process,Queue
from multiprocessing import JoinableQueue
import time
import random

# def consumer(q,name):
#     while True:
#         time.sleep(random.randint(1,3))
#         res=q.get()
#         print('消费者%s拿到了%s'%(name,res))
#
# def producer(seq,q,name):
#     for item in seq:
#         time.sleep(random.randint(1,3))
#         q.put(item)
#         print('\033[42m生产者%s生产了%s\033[0m' %(name,item))
# if __name__ == '__main__':
#     q=Queue()
#     c=Process(target=consumer,args=(q,'xp'),)
#     c.start()
#
#
#     seq=['包子%s'%i for i in range(10)]
#     producer(seq,q,'厨师1')
#     print('主进程')

# '''最后发一个空字符,解决死循环问题'''
# def consumer(q,name):
#     while True:
#         time.sleep(random.randint(1,3))
#         res=q.get()
#         if res is None:break
#         print('消费者%s拿到了%s'%(name,res))
#
# def producer(seq,q,name):
#     for item in seq:
#         time.sleep(random.randint(1,3))
#         q.put(item)
#         print('\033[42m生产者%s生产了%s\033[0m' %(name,item))
#     q.put(None)
# if __name__ == '__main__':
#     q=Queue()
#     c=Process(target=consumer,args=(q,'xp'),)
#     c.start()
#
#
#     seq=['包子%s'%i for i in range(10)]
#     #producer(seq,q,'厨师1')
#     p=Process(target=producer,args=((seq,q,'xingpu')))
#     p.start()
#     print('主进程')



'''
q.join()
join等待收到全部task_done回应
q.task_done()



主进程等待生产者结束 p.join
生产者等待消费者取完数据结束,一旦取完就不再阻塞
消费者c.daemon 主进程完毕即回收,消费者已无存在必要
'''
def consumer(q,name):
    while True:
        #time.sleep(random.randint(1,3))
        res=q.get()
        q.task_done()
        print('消费者%s拿到了%s'%(name,res))

def producer(seq,q,name):
    for item in seq:
        #time.sleep(random.randint(1,3))
        q.put(item)
        print('\033[42m生产者%s生产了%s\033[0m' %(name,item))
    q.join()
    print('===========>:')
if __name__ == '__main__':
    q=Queue()
    q=JoinableQueue()           #JoinableQueque可以确认是否取完
    c=Process(target=consumer,args=(q,'xp'),)
    c.daemon=True
    c.start()


    seq=['包子%s'%i for i in range(10)]
    #producer(seq,q,'厨师1')
    p=Process(target=producer,args=((seq,q,'xingpu')))
    p.start()
    p.join()
    #c.join()
    print('主进程')




3.附录 列表生成式

#!/usr/bin/env python
# -*- coding:utf-8 -*-

#Author:xp
#blog_url: http://blog.csdn.net/wuxingpu5/article/details/71209731

res1=[i for i in range(10)]
print(res1)

res1=[i for i in range(10) if i > 5] #判断大于5的写入列表 不能有else
print(res1)




Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐