**PYTHON CENGAE** Question: Switch consumer 1 staring up and consumer o starting, consumer o starting up should be before consumer 1 staring up. CODE BLOCK BELOW: import time, random from threading import Thread, currentThread, Lock class SharedCell(object): """Shared data for the producer/consumer problem.""" def __init__(self): """Data undefined at startup.""" self.data = -1 self.lock = Lock() def setData(self, data): """Producer's method to write to shared data.""" with self.lock: print("%s setting data to %d" % \ (currentThread().getName(), data)) self.data = data def getData(self): """Consumer's method to read from shared data.""" with self.lock: print("%s accessing data %d" % \ (currentThread().getName(), self.data)) return self.data class Producer(Thread): """A producer of data in a shared cell.""" def __init__(self, cell, accessCount, sleepMax): """Create a producer with the given shared cell, number of accesses, and maximum sleep interval.""" Thread.__init__(self, name = "Producer") self.accessCount = accessCount self.cell = cell self.sleepMax = sleepMax def run(self): """Resets the data in the cell and goes to sleep, the given number of times.""" print("%s starting up" % self.getName()) for count in range(self.accessCount): time.sleep(random.randint(1, self.sleepMax)) self.cell.setData(count + 1) print("%s is done producing\n" % self.getName()) class Consumer(Thread): """A consumer of data in a shared cell.""" def __init__(self, cell, accessCount, sleepMax, consumerID): """Create a consumer with the given shared cell, number of accesses, and maximum sleep interval.""" Thread.__init__(self, name = f"Consumer {consumerID}") self.accessCount = accessCount self.cell = cell self.sleepMax = sleepMax def run(self): """Announce start-up, sleep and write to shared cell the given number of times, and announce completion.""" print("%s starting up\n" % self.getName()) for count in range(self.accessCount): time.sleep(random.randint(1, self.sleepMax)) value = self.cell.getData() print("%s is done consuming\n" % self.getName()) def main(): consumerCount = int(input("Enter the number of consumers: ")) accessCount = int(input("Enter the number of accesses: ")) sleepMax = 4 cell = SharedCell() threads = [] print("Starting the threads") p = Producer(cell, accessCount, sleepMax) c0 = Consumer(cell, accessCount, sleepMax, 0) c1 = Consumer(cell, accessCount, sleepMax, 1) threads.append(p) threads.append(c0) threads.append(c1) for t in threads: t.start() if isinstance(t, Producer): t.join() for t in threads: if not isinstance(t, Producer): t.join() main()
**PYTHON CENGAE** Question: Switch consumer 1 staring up and consumer o starting, consumer o starting up should be before consumer 1 staring up.
CODE BLOCK BELOW:
import time, random from threading import Thread, currentThread, Lock class SharedCell(object): """Shared data for the producer/consumer problem.""" def __init__(self): """Data undefined at startup.""" self.data = -1 self.lock = Lock() def setData(self, data): """Producer's method to write to shared data.""" with self.lock: print("%s setting data to %d" % \ (currentThread().getName(), data)) self.data = data def getData(self): """Consumer's method to read from shared data.""" with self.lock: print("%s accessing data %d" % \ (currentThread().getName(), self.data)) return self.data class Producer(Thread): """A producer of data in a shared cell.""" def __init__(self, cell, accessCount, sleepMax): """Create a producer with the given shared cell, number of accesses, and maximum sleep interval.""" Thread.__init__(self, name = "Producer") self.accessCount = accessCount self.cell = cell self.sleepMax = sleepMax def run(self): """Resets the data in the cell and goes to sleep, the given number of times.""" print("%s starting up" % self.getName()) for count in range(self.accessCount): time.sleep(random.randint(1, self.sleepMax)) self.cell.setData(count + 1) print("%s is done producing\n" % self.getName()) class Consumer(Thread): """A consumer of data in a shared cell.""" def __init__(self, cell, accessCount, sleepMax, consumerID): """Create a consumer with the given shared cell, number of accesses, and maximum sleep interval.""" Thread.__init__(self, name = f"Consumer {consumerID}") self.accessCount = accessCount self.cell = cell self.sleepMax = sleepMax def run(self): """Announce start-up, sleep and write to shared cell the given number of times, and announce completion.""" print("%s starting up\n" % self.getName()) for count in range(self.accessCount): time.sleep(random.randint(1, self.sleepMax)) value = self.cell.getData() print("%s is done consuming\n" % self.getName()) def main(): consumerCount = int(input("Enter the number of consumers: ")) accessCount = int(input("Enter the number of accesses: ")) sleepMax = 4 cell = SharedCell() threads = [] print("Starting the threads") p = Producer(cell, accessCount, sleepMax) c0 = Consumer(cell, accessCount, sleepMax, 0) c1 = Consumer(cell, accessCount, sleepMax, 1) threads.append(p) threads.append(c0) threads.append(c1) for t in threads: t.start() if isinstance(t, Producer): t.join() for t in threads: if not isinstance(t, Producer): t.join() main()
Step by step
Solved in 4 steps with 4 images