Понимание комбинации Threading и Queue в Python

Я начал изучать создание потоков в Python. Сначала я провел некоторый теоретический поиск, чтобы понять, как работают потоки в Python. Я также прочитал об использовании очереди в Python и о том, как она может помочь в решении тривиальных проблем с потоками. Я смог понять отдельные коды для каждого. Затем я наткнулся на следующий учебник:

http://www.ibm.com/developerworks/aix/library/au-threadingpython/

Он показывает актуальность Thread и Queue в Python и то, как они могут ускорить процесс выполнения при определенных обстоятельствах.

Мне трудно понять некоторые области кода

def main():

        #spawn a pool of threads, and pass them queue instance 
        for i in range(5):
          t = ThreadUrl(queue)
          t.setDaemon(True)
          t.start()

       #populate queue with data   
          for host in hosts:
            queue.put(host)

       #wait on the queue until everything has been processed     
       queue.join()

      main()
      print "Elapsed Time: %s" % (time.time() - start)

В первом цикле for создается несколько потоков, и им передается экземпляр очереди. Но, насколько я понимаю, на данный момент очередь пуста.

В следующем цикле for

for host in hosts:

Значения хоста помещаются в очередь. Теперь, как эти данные очереди назначаются потокам?

Наконец, какая польза от queue.join() в отношении этой программы?


person abhinav singh    schedule 10.11.2014    source источник


Ответы (1)


«В первом цикле for создается несколько потоков, и ему передается экземпляр очереди. Но, насколько я понимаю, на данный момент очередь пуста».

Да, темы запущены, но им пока нечего делать.

for host in hosts:

«Значения хоста помещаются в очередь. Как теперь эти данные очереди назначаются потокам?»

экземпляром Queue

«какая польза от queue.join() в отношении этой программы?»

join заставляет вашу программу ждать, пока все потоки закончат обработку и их выходные данные будут собраны экземпляром очереди. Ваша программа будет заблокирована в этот момент, пока очередь не будет завершена.

person Anentropic    schedule 10.11.2014