queue.put(),放入put()的项目是什么?

时间:2015-02-04 23:03:43

标签: python thread-safety queue

队列模块有一个示例代码: (https://docs.python.org/2/library/queue.html#module-Queue):

def worker():
    while True:
        item = q.get()
        do_work(item)
        q.task_done()

q = Queue()
for i in range(num_worker_threads):
     t = Thread(target=worker)
     t.daemon = True
     t.start()

for item in source():
    q.put(item)

q.join()

我不明白的是,source()函数是什么,'items'是什么?

我有一个类似这样的课程:

class do_stuff():
    def do_some_thing_1():
          #do something 1

    def do_some_thing_2():
          #do something 2

    def do_some_thing_3():
          #do something 3

    def do_them_all():
          self.do_some_thing_1()
          self.do_some_thing_2()
          self.do_some_thing_3()

在我的GUI脚本中,我调用了类的do_them_all():

  some_button(command = get_it_done)

  def get_it_done():
      get_done = do_stuff()
      get_done.do_them_all()

并且每个do_thing函数都依赖于先前要完成的先前函数。但是在最终的类植入中,do_some_thing_3可能在do_some_thing_2完成之前被触发,或者do_some_thing_2在do_some_thing_1完成之前被触发。

如何实现此队列? 修改do_them_all():

def do_them_all():
    queue.put(do_some_thing_1)
    queue.put(do_some_thing_2)
    queue.put(do_some_thing_3)

    queue.join()

2 个答案:

答案 0 :(得分:0)

我能够用一个简单的方法做到这一点:

queue.put(do_some_thing_1)
queue.put(do_some_thing_2)
queue.put(do_some_thing_3)

答案 1 :(得分:0)

queue.put(do_stuff.do_some_thing_1)
queue.put(do_stuff.do_some_thing_2)
queue.put(do_stuff.do_some_thing_3)

我想你可以尝试一下:

def worker():
    while True:
        item = q.get()
        do_work(item)
        q.task_done()

q.put(do_stuff.do_some_thing_1)
q.put(do_stuff.do_some_thing_2)
q.put(do_stuff.do_some_thing_3)

for i in range(num_worker_threads):
     t = Thread(target=worker)
     t.daemon = True
     t.start()


q.join()