|
用全局变量不行,用参数可以
- from multiprocessing import Process, Semaphore, Lock, Queue
- import time, random
- class Consumer(Process):
- def __init__(self, buffer, empty, full, lock):
- Process.__init__(self)
- self.buffer = buffer
- self.empty = empty
- self.full = full
- self.lock = lock
- def run(self):
- print('now in c')
- while True:
- print('now in c while')
- self.full.acquire()
- #self.lock.acquire()
- if self.buffer.qsize != 0:
- print('从队列取出一个元素 %f。当前队列长度:%i' %(self.buffer.get(), self.buffer.qsize()))
- time.sleep(5)
- #self.lock.release()
- self.empty.release()
- class Producer(Process):
- def __init__(self, buffer, empty, full, lock):
- Process.__init__(self)
- self.buffer = buffer
- self.empty = empty
- self.full = full
- self.lock = lock
- def run(self):
- print('now in p')
- while True:
- print('now in p while')
- self.empty.acquire()
- #self.lock.acquire()
- rd = random.random()
- self.buffer.put(rd)
- print('给队列追加一个元素 %f,当前队列长度:%i' %(rd, self.buffer.qsize()))
- time.sleep(1)
- #self.lock.release()
- self.full.release()
- if __name__ == '__main__':
- buffer = Queue(10)
- empty = Semaphore(5)
- full = Semaphore(0)
- lock = Lock()
- p = Producer(buffer, empty, full, lock)
- c = Consumer(buffer, empty, full, lock)
- p.daemon = c.daemon = True
- p.start()
- c.start()
- p.join()
- c.join()
- print('Ended!')
复制代码 |
|