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")