Kelas Python yang mewarisi benang tidak boleh menamatkan benang melalui bit bendera
黄舟
黄舟 2017-05-18 11:02:22
0
1
813

Saya menghadapi masalah seperti itu semasa menguji model pengeluar-pengguna Selepas mewarisi benang, saya menambah tanda tanda

class Consumer(threading.Thread):
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self._queue = queue
        self.mark = True

    def run(self):
        while self.mark:
            msg = self._queue.get()
            if isinstance(msg, str) and msg == 'quit':
                break
            print("I'm a thread, and I received %s!!" % msg)

        print('Bye byes!')
def producer():
    q = queue.Queue()
    worker = Consumer(q)
    worker.start()  # 开启消费者线程
    start_time = time.time()
    while time.time() - start_time < 5:
        q.put('something at %s' % time.time())
        time.sleep(1)
    worker.mark = Flese
    worker.join()

Saya pada asalnya menjangkakan untuk menggunakan bendera ini untuk mengawal hujung utas, tetapi kesan sebenar ialah program tersekat dalam worker.join()
dan tidak keluar sama sekali.

Maaf, apakah sebabnya?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua(1)
伊谢尔伦
class Consumer(threading.Thread):
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self._queue = queue
        self.mark = True

    def run(self):
        while self.mark:
            try:
                msg = self._queue.get(block=False) # 非阻塞
                print("I'm a thread, and I received %s!!" % msg)
            except:pass
            
        print('self.mark',self.mark)
        print('Bye byes!')
        
def producer():
    q = queue.Queue()
    worker = Consumer(q)
    worker.start()  # 开启消费者线程
    start_time = time.time()
    while time.time() - start_time < 5:
        q.put('something at %s' % time.time())
        time.sleep(1)
    worker.mark = False
    worker.join()
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan