LINUX.ORG.RU

Потоки в питоне

 ,


0

2

Смотрю на пример использования из интернетов

class DownloadWorker(Thread):
   def __init__(self, queue):
       Thread.__init__(self)
       self.queue = queue

   def run(self):
       while True:
           # Get the work from the queue and expand the tuple
           directory, link = self.queue.get()
           download_link(directory, link)
           self.queue.task_done()

Почему в run методе бесконечный цикл? Разве должно быть не что-то типа «while self.queue.unfinished_tasks:»? Как он поток завершит?

★★☆

воркер не завершается - он живет все время с программой и выполняет задачи в фоне.

anonymous ()

Возможно, цикл прерывается в методе task_done?

WereFox ★☆ ()
Ответ на: комментарий от anonymous

task_done уменьшает счётчик unfinished_tasks. Когда unfinished_tasks==0, цикл должен завершиться по-идее, но как он об этом узнает, если он бесконечный?

yvv ★★☆ ()

Ух, более того, все приложения, которые не отрабатывают как команда, а, например, ждут действий от пользователя, реализуются явно или неявно через бесконечный цикл, с прерыванием, скажем, при клике на крестике закрывающем окно.

peregrine ★★★★★ ()
Ответ на: комментарий от yvv

Этот поток никто джойнить не будет. Он должен дохнуть при закрытии основного потока (что не совсем корректно конечно, но при некоторой логике работы вполне допустимо).

Norgat ★★★★★ ()

Это если я правильно понимаю код дочернего процесса ? Т е он должен висеть в памяти и читать очередь ?

Jopich1 ()
Ответ на: комментарий от yvv

цикл должен завершиться по-идее, но как он об этом узнает, если он бесконечный?

Ты предлагаешь почтенной публике самостоятельно искать код?

WereFox ★☆ ()

Короче, в предложенном варианте с бесконечным циклом всё работает с thread.daemon=True. Щитаю вопрос закрытым, всем спасибо.

yvv ★★☆ ()
Ответ на: комментарий от anonymous

А вот хрен. Без daemon не завершается скрипт. Иди анонируй дальше.

yvv ★★☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.