찾다

 >  Q&A  >  본문

python中生产者消费者线程问题

在使用python的多线程时,使用了生产者消费者模式,一般都是消费者接受生产者的数据执行某些操作,但是现在这个消费者线程遇到了异常,需要终止执行,但是生产者线程因为还在生产数据,主线程在等待它执行完。目前想当消费者线程遇到错误时能够通知生产者线程,我挂了,你也结束吧。请问大家有什么好的实现方法

import threading

class Producer(threading.Thread):

    def __init__(self, queue):
        super(Producer, self).__init__()
        self.queue = queue

    def run(self):
        while True:
            for i in range(10):
                self.queue.put(i)

class Consumer(threading.Thread):

    def __init__(self, queue):
        super(Consumer, self).__init__()
        self.queue = queue

    def run(self):
        while True:
            try:
                data = self.queue.get()
                print data
                if data == 5:
                    raise ValueError('over')
            except ValueError as e:
                #通知生产者结束
                #如何实现?
            
高洛峰高洛峰2873일 전662

모든 응답(2)나는 대답할 것이다

  • PHPz

    PHPz2017-04-18 10:29:07

    내 방법:
    플래그를 추가합니다.

    먼저 결과를 살펴보겠습니다.

    더 이상 헛소리는 그만하고 코드를 보여주세요

    으아악

    마지막으로 Python의 멀티스레딩에 대해 이야기하겠습니다. GIL의 존재로 인해 멀티스레딩은 실제로 언제 사용하는 것이 최선의 선택이 아닐 수 있습니다. 자신의 비즈니스 상황에 따라 멀티스레딩 모듈을 구하세요.

    회신하다
    0
  • PHPz

    PHPz2017-04-18 10:29:07

    간단히 말하면 오류를 발생시키고 프로세스가 자체적으로 충돌하도록 놔두세요.
    또는 예외 처리를 사용하여 소비자 실행을 래핑하고 예외를 포착한 다음 생산을 제어할 수도 있습니다. 아래.

    회신하다
    0
  • 취소회신하다