在multiprocessing.Manager上添加事件监听器

时间:2014-09-02 22:42:06

标签: python multiprocessing

我有两台机器,现在孩子正在做一段时间1:语句来不断检查保存作业的BaseManager。这让它很健谈。有更好的方法吗?

你可以在经理上创建一个事件,说'&34;嘿,我有一个新工作的孩子!"就像在C#中你可以使用+ =和 - =语法连接一个新事件?

非常简单的孩子是这样的:

class QueueManager(BaseManager):
""" multiprocessing queue manager object """
     pass
if __name__ == "__main__":
    # get the get function
    QueueManager.register('get_queue')
    while 1:
       queue = m.get_queue()
       if queue.empty() == False and \
           queue.qsize() > 0:
           job_directory = queue.get()
           print job_directory

所有我都在从队列中提取作业文件夹。我想要一个更好的方法来做到这一点。可以将事件连接起来吗?

谢谢

1 个答案:

答案 0 :(得分:2)

这里不需要繁忙的循环。只需在while循环之外调用get_queue一次,然后在循环内直接使用queue.get()

class QueueManager(BaseManager):
""" multiprocessing queue manager object """
     pass

if __name__ == "__main__":
    QueueManager.register('get_queue')
    queue = m.get_queue()
    while 1:
       job_directory = queue.get()
       print job_directory

管理员正在将Proxy返回到您在服务器上创建的Queue.Queue()对象,而不是实际Queue.Queue对象的副本。您在Proxy上执行的每项操作都会传递到服务器上Queue.Queue的实例,因此您可以像使用普通Queue一样使用它。从客户端的角度来看,Queue子类返回的共享BaseManager实例与普通的Queue.Queue没有区别。