Python生产者/消费者与过程和p

2024-05-12 08:10:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用过程为生产者-消费者编写简单的代码。生产者是一个过程。对于消费者,我从池中获取流程。在

from multiprocessing import Manager, Process, Pool
from time import sleep
def writer(queue):
   for i in range(10):
     queue.put(i)
     print 'put 1 size now ',queue.qsize()
     sleep(1)

def reader(queue):
   print 'in reader'
   for i in range(10):
     queue.get(1)
     print 'got 1 size now ', queue.qsize()

if __name__ == '__main__':
    q = Manager().Queue()
    p = Process(target=writer, args=(q,))
    p.start()
    pool = Pool()
    c = pool.apply_async(reader,q)

但我犯了错误

^{pr2}$

谁能告诉我,我哪里错了。在


Tags: infromimportqueue过程defmanager消费者
1条回答
网友
1楼 · 发布于 2024-05-12 08:10:32

嗨,我找到了答案

from multiprocessing import Manager, Process, Pool,Queue
from Queue import Empty

def writer(queue):
   for i in range(10):
     queue.put(i)
     print 'put %i size now %i'%(i, queue.qsize())

def reader(id, queue):
   for i in range(10):
     try:
       cnt = queue.get(1,1)
       print '%i got %i size now %i'%(id, cnt, queue.qsize())
     except Empty:
       pass

class Managerss:
   def __init__(self):
     self.queue= Queue()
     self.NUMBER_OF_PROCESSES = 3

   def start(self):
     self.p = Process(target=writer, args=(self.queue,))
     self.p.start()
     self.workers = [Process(target=reader, args=(i, self.queue,))
                        for i in xrange(self.NUMBER_OF_PROCESSES)]
     for w in self.workers:
       w.start()

   def join(self):
     self.p.join()
     for w in self.workers:
       w.join()

if __name__ == '__main__':
    m= Managerss()
    m.start()
    m.join()

希望有帮助

相关问题 更多 >