【问题标题】:How can I put and get a set of multiple items in a queue?如何在队列中放置和获取一组多个项目?
【发布时间】:2012-10-10 05:57:23
【问题描述】:

工人:

def worker():
    while True:
        fruit, colour = q.get()
        print 'A ' + fruit + ' is ' + colour
        q.task_done()

将项目放入队列:

fruit = 'banana'
colour = 'yellow'
q.put(fruit, colour)

输出:

>>> A banana is yellow

我怎样才能做到这一点?我试了一下,得到了ValueError: too many values to unpack,然后我才意识到我的q.put()把这两个变量都放到了队列中。

有什么方法可以将一组“变量/对象”放入一个队列项中,就像我尝试做的那样?

【问题讨论】:

    标签: python variables task-queue


    【解决方案1】:

    是的,使用元组:

    fruit = 'banana'
    colour = 'yellow'
    q.put((fruit, colour))
    

    它应该是自动解包的(应该,因为我不能在atm尝试它)。

    【讨论】:

      【解决方案2】:

      所以,我认为解决此问题的最佳方法是稍微重构您的数据。制作某种对象来保存一对值(在本例中为水果和颜色),然后将该对象放入队列中,然后在需要时取出变量。

      如果您愿意,我可以稍后发布一些示例代码。

      【讨论】:

      • 是的,这基本上就是上面@dav1d 的回答所做的,使用元组作为值持有对象
      【解决方案3】:

      我只是列个清单:

      fruit = 'banana'
      colour = 'yellow'
      q.put([fruit, colour])
      

      然后得到它:

      result = q.get()
      fruit = result[0]
      colour = result[1]
      

      【讨论】:

        【解决方案4】:

        Python 还借助类提供数据抽象。

        因此,另一种方法是在类的帮助下放置一个对象(将相关信息抽象在一起),如下所示。

        class Fruit(object):
           def __init__(self, name, color):
               self.name = name
               self.color = color
        
        q.put(Fruit('banana', 'yellow'))
        
        def worker():
            while True:
                fruit  = q.get()
                print 'A ' + fruit.name + ' is ' + fruit.color
                q.task_done()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-15
          • 2010-11-21
          • 2022-01-02
          • 1970-01-01
          相关资源
          最近更新 更多