|  | from threading import Thread
import multiprocessing as mp
import time
import random
from queue import Queue
inputQueue = mp.JoinableQueue()
inputQueue2 = mp.Queue(10)
class ProducerThread(Thread):
    def __init__(self,name='',custom_id,daemon=False):
        super(ProducerThread, self).__init__()
        self.name = "{}-{}".format(name,custom_id)
        self.setDaemon(daemon)
 
    global inputQueue
    def run(self):
        numbers = range(40)
        counter = 0
        while counter < 20:
            num = random.choice(numbers)
            inputQueue.put(num)
            print("\nPut",num)
            time.sleep(.08)
            counter+=1 
        
class ConsumerProcess1(Thread):
    def __init__(self,name,custom_id,daemon=False):
        super(ConsumerProcess1,self).__init__()
        self.name = "{}-{}".format(name,custom_id)
        self.daemon = daemon
    global inputQueue
    def run(self):
        while (not inputQueue.empty()):
            num = inputQueue.get()
            inputQueue.task_done()
            print("\nGot", num)
            time.sleep(.1)
        
if __name__ == "__main__":
    print("this is example 2")
    time.sleep(2)
    a=ProducerThread(name = 'producer thread',custom_id=1,daemon=False)
    b=ConsumerProcess1(name = 'consumer process',custom_id=1,daemon=True)
    
    a.start()
    b.start()
    print(a.ident,a.name,"\n")
    print(b.ident,b.name,"\n")
 |