Python实现的生产者、消费者问题完整实例

本文实例讲述了Python实现的生产者、消费者问题。分享给大家供大家参考,具体如下:

生产者、消费者问题,经典的线程同步问题:假设有一个缓冲池(列表),生产者往里面放东西,消费者从里面取,规则是:列表为空的时候,生产者才能放东西;列表不为空的时候,消费者才能取东西;为了简单起见,暂定缓冲池中最多只能有一个产品。这里生产者和消费者共同操作一个资源:缓冲池,因此每次操作的时候,需要给资源加锁,操作结束时,释放锁,这样才能做到资源同步。使用python实现,需要继承Thread类,获取锁对象,代码如下:

# -*- coding:utf-8 -*-

#! python2

from threading import Thread

from threading import Lock

import time,random

pro_list = []

lock = Lock()

class Producer(Thread):

def run(self):

global pro_list

while True:

i = random.randint(0, 100)

lock.acquire()

if len(pro_list) > 0:

print "!--product still in list, wait consumer to get it.."

else:

pro_list.append(i)

print ":::Producer put:", pro_list[0]

lock.release()

time.sleep(2)

class Consumer(Thread):

def run(self):

global pro_list

while True:

lock.acquire()

if len(pro_list) == 0:

print "!--No product now, wait producer put in..."

else:

print ":::Consumer fetch:", pro_list[0]

pro_list.pop(0)

lock.release()

time.sleep(2)

Producer().start()

Producer().start()

Consumer().start()

Producer().start()

Producer().start()

Consumer().start()

Consumer().start()

这里使用多个生产者和消费者,共同操作缓冲池,部分执行结果如下:

:::Producer put: 78

!--product still in list, wait consumer to get it..

:::Consumer fetch: 78

:::Producer put: 99

!--product still in list, wait consumer to get it..

:::Consumer fetch: 99

!--No product now, wait producer put in...

:::Producer put: 12

:::Consumer fetch: 12

:::Producer put: 91

!--product still in list, wait consumer to get it..

!--product still in list, wait consumer to get it..

:::Consumer fetch: 91

!--No product now, wait producer put in...

:::Producer put: 63

:::Consumer fetch: 63

:::Producer put: 85

!--product still in list, wait consumer to get it..

!--product still in list, wait consumer to get it..

:::Consumer fetch: 85

!--No product now, wait producer put in...

:::Producer put: 1

:::Consumer fetch: 1

:::Producer put: 26

!--product still in list, wait consumer to get it..

!--product still in list, wait consumer to get it..

:::Consumer fetch: 26

!--No product now, wait producer put in...

:::Producer put: 8

:::Consumer fetch: 8

:::Producer put: 19

!--product still in list, wait consumer to get it..

!--product still in list, wait consumer to get it..

:::Consumer fetch: 19

!--No product now, wait producer put in...

:::Producer put: 74

!--product still in list, wait consumer to get it..

:::Consumer fetch: 74

:::Producer put: 50

!--product still in list, wait consumer to get it..

:::Consumer fetch: 50

!--No product now, wait producer put in...

:::Producer put: 97

:::Consumer fetch: 97

:::Producer put: 69

!--product still in list, wait consumer to get it..

!--product still in list, wait consumer to get it..

:::Consumer fetch: 69

!--No product now, wait producer put in...

:::Producer put: 41

!--product still in list, wait consumer to get it..

:::Consumer fetch: 41

:::Producer put: 6

!--product still in list, wait consumer to get it..

:::Consumer fetch: 6

!--No product now, wait producer put in...

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python数学运算技巧总结》

希望本文所述对大家Python程序设计有所帮助。

以上是 Python实现的生产者、消费者问题完整实例 的全部内容, 来源链接: utcz.com/z/324305.html

回到顶部