@agent_2203

Почему при Queue().get() (multiprocessing) через время зависает программа?

Есть код:

def execute(self, function, **args):
        while True:
            tmout = False
            sem.acquire()
            response = Queue()
            p = Process(
                target=self.execute_work, 
                args=[function, response], 
                kwargs=args
            )
            p.start()
            p.join(10)
            if p.is_alive():
                p.terminate()
                p.join()
                tmout = True
            resp = response.get()
            sem.release()
            if tmout:
                continue
            resp = resp if resp != dict else resp.copy()


К этому методу обращаются несколько потоков и через время response.get() просто виснит, с чем это может быть связано, не знаете ?
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
@dmtrrr
Backend developer
Потому что это блокирующий вызов.

Queue.get(block=True, timeout=None)

Remove and return an item from the queue. If optional args block is true and timeout is None (the default), block if necessary until an item is available.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы