From c38c694b059c545f66c7f4dfa50746bffc6e4e4f Mon Sep 17 00:00:00 2001 From: muhammadarl Date: Wed, 20 Apr 2022 14:21:02 +0700 Subject: [PATCH] pengumpulan kuis muhammad syiarul --- .../Muhammad Syiarul Amrullah/Barrier.py | 26 +++++++ .../MyThreadClass_lock.py | 46 +++++++++++ .../Muhammad Syiarul Amrullah/Rlock.py | 59 ++++++++++++++ .../Muhammad Syiarul Amrullah/Semaphore.py | 41 ++++++++++ .../Thread_definition.py | 19 +++++ .../Thread_determine.py | 30 ++++++++ .../Thread_name_and_processes.py | 38 +++++++++ .../Threading_with_queue.py | 47 +++++++++++ .../Muhammad Syiarul Amrullah/condition.py | 77 +++++++++++++++++++ .../Muhammad Syiarul Amrullah/event.py | 52 +++++++++++++ 10 files changed, 435 insertions(+) create mode 100644 QUIS SISTER 1/Muhammad Syiarul Amrullah/Barrier.py create mode 100644 QUIS SISTER 1/Muhammad Syiarul Amrullah/MyThreadClass_lock.py create mode 100644 QUIS SISTER 1/Muhammad Syiarul Amrullah/Rlock.py create mode 100644 QUIS SISTER 1/Muhammad Syiarul Amrullah/Semaphore.py create mode 100644 QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_definition.py create mode 100644 QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_determine.py create mode 100644 QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_name_and_processes.py create mode 100644 QUIS SISTER 1/Muhammad Syiarul Amrullah/Threading_with_queue.py create mode 100644 QUIS SISTER 1/Muhammad Syiarul Amrullah/condition.py create mode 100644 QUIS SISTER 1/Muhammad Syiarul Amrullah/event.py diff --git a/QUIS SISTER 1/Muhammad Syiarul Amrullah/Barrier.py b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Barrier.py new file mode 100644 index 0000000..e899d2d --- /dev/null +++ b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Barrier.py @@ -0,0 +1,26 @@ +from random import randrange +from threading import Barrier, Thread +from time import ctime, sleep + +num_masakan = 3 +finish_line = Barrier(num_masakan) +list_masakan = ['mie ayam', 'mie goreng', 'nasi goreng'] + +def masakan(): + name = list_masakan.pop() + sleep(randrange(2, 5)) + print('%s selesai dimasak pada: %s \n' % (name, ctime())) + finish_line.wait() + +def main(): + threads = [] + print('START Cook!!!!') + for i in range(num_masakan): + threads.append(Thread(target=masakan)) + threads[-1].start() + for thread in threads: + thread.join() + print('Cook over!') + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Muhammad Syiarul Amrullah/MyThreadClass_lock.py b/QUIS SISTER 1/Muhammad Syiarul Amrullah/MyThreadClass_lock.py new file mode 100644 index 0000000..6bb449b --- /dev/null +++ b/QUIS SISTER 1/Muhammad Syiarul Amrullah/MyThreadClass_lock.py @@ -0,0 +1,46 @@ +import threading +import random +from threading import Thread +import time + + +# Lock Definition +threadLock = threading.Lock() + +class subclassThread (Thread): + def __init__(self, name): + Thread.__init__(self) + self.name = name + def run(self): + threadLock.acquire() + print("jalankan proses generate random number proses {}".format(self.name)) + threads = list() + randomNumber = GenerateRandomNumber() + time.sleep(random.randint(1,10)) + print("hasil generate random number {} dari operasi {}".format(randomNumber, self.name)) + threadLock.release() +def GenerateRandomNumber(): + listRandom = list() + for i in range(0,10): + listRandom.append("arul") + return listRandom + +def main(): + thread1 = subclassThread("Generate Random Number #1 ") + thread2 = subclassThread("Generate Random Number #2 ") + + thread1.start() + thread2.start() + + thread1.join() + thread2.join() + + print("End") + + +if __name__ == "__main__": + main() + + + + diff --git a/QUIS SISTER 1/Muhammad Syiarul Amrullah/Rlock.py b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Rlock.py new file mode 100644 index 0000000..12c89c7 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Rlock.py @@ -0,0 +1,59 @@ +import threading +import time +import random + + +class kunci_reenant: + def __init__(self): + self.lock = threading.RLock() + self.total_items = 0 + + def execute(self, value): + with self.lock: + self.total_items += value + + def add(self): + with self.lock: + self.execute(1) + + def remove(self): + with self.lock: + self.execute(-1) + +def penambah(box, items): + print("{} barang masuk gudang \n".format(items)) + while items: + box.add() + time.sleep(1) + items -= 1 + print("1 barang telah masuk -->{} item akan masuk gudang \n".format(items)) + + + +def pengurang(box, items): + print("{} barang keluar dari gudang \n".format(items)) + while items: + box.remove() + time.sleep(1) + items -= 1 + print("1 barang telah keluar -->{} item akan keluar dari gudang \n".format(items)) + + +def main(): + kunci = kunci_reenant() + + t1 = threading.Thread(target=penambah, \ + args=(kunci, random.randint(10,20))) + t2 = threading.Thread(target=pengurang, \ + args=(kunci, random.randint(1,10))) + + t1.start() + t2.start() + + + t1.join() + t2.join() + + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Muhammad Syiarul Amrullah/Semaphore.py b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Semaphore.py new file mode 100644 index 0000000..d3a31c5 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Semaphore.py @@ -0,0 +1,41 @@ +import logging +import threading +import time +import random + +LOG_FORMAT = '%(asctime)s %(threadName)-17s %(levelname)-8s %(message)s' +logging.basicConfig(level=logging.INFO, format=LOG_FORMAT) + + +semaphore = threading.Semaphore(0) +item = 0 + + +def pelanggan(): + logging.info('Pelanggan meminta antrian') + semaphore.acquire() + logging.info('Pelanggan menerima: antrian no {}'.format(item)) + + +def antrian(): + global item + time.sleep(3) + item = random.randint(0, 1000) + logging.info('antrian generate: no antrian {}'.format(item)) + semaphore.release() + + +def main(): + for i in range(3): + t1 = threading.Thread(target=pelanggan) + t2 = threading.Thread(target=antrian) + + t1.start() + t2.start() + + t1.join() + t2.join() + + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_definition.py b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_definition.py new file mode 100644 index 0000000..94d8932 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_definition.py @@ -0,0 +1,19 @@ +import threading +import random + +def GenerateRandomNumber(number): + listRandom = list() + for i in range(0,10): + listRandom.append(random.randint(10,100)) + print("hasil generate random number {} dari operasi ke {}".format(listRandom, number)) + +def main(): + threads = list() + for i in range(1,11): + t = threading.Thread(target=GenerateRandomNumber ,args=(i,)) + threads.append(t) + t.start() + t.join() + +if __name__ == '__main__': + main() diff --git a/QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_determine.py b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_determine.py new file mode 100644 index 0000000..35dbdd0 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_determine.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 13:11:29 2022 + +@author: syiar +""" +import threading +import time +import random + +def generate_random_A(): + print (threading.currentThread().getName()+str( '--> mulai generate \n')) + time.sleep(2) + print (threading.currentThread().getName()+str('--> menghasilkan random number {} \n').format(random.randint(10, 100))) + return + + +if __name__ == "__main__": + + t1 = threading.Thread(name='generate_random_A', target=generate_random_A) + t2 = threading.Thread(name='generate_random_B', target=generate_random_A) + t3 = threading.Thread(name='generate_random_C', target=generate_random_A) + + t1.start() + t2.start() + t3.start() + + t1.join() + t2.join() + t3.join() \ No newline at end of file diff --git a/QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_name_and_processes.py b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_name_and_processes.py new file mode 100644 index 0000000..454aece --- /dev/null +++ b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Thread_name_and_processes.py @@ -0,0 +1,38 @@ +from threading import Thread +import random +import time +import os + +class subclassThread (Thread): + def __init__(self, name): + Thread.__init__(self) + self.name = name + def run(self): + threads = list() + randomNumber = GenerateRandomNumber() + print("hasil generate random number {} dari operasi {}".format(randomNumber, self.name)) +def GenerateRandomNumber(): + listRandom = list() + for i in range(0,10): + listRandom.append(random.randint(10,100)) + return listRandom + +def main(): + thread1 = subclassThread("Generate Random Number #1 \n") + thread2 = subclassThread("Generate Random Number #2 \n") + + thread1.start() + thread2.start() + + thread1.join() + thread2.join() + + print("End") + + +if __name__ == "__main__": + main() + + + + diff --git a/QUIS SISTER 1/Muhammad Syiarul Amrullah/Threading_with_queue.py b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Threading_with_queue.py new file mode 100644 index 0000000..9557765 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Syiarul Amrullah/Threading_with_queue.py @@ -0,0 +1,47 @@ +""""Thread synchronisation with queue""" + +from threading import Thread +from queue import Queue +import time +import random + + +class Antrian(Thread): + + def __init__(self, queue): + Thread.__init__(self) + self.queue = queue + + def run(self): + for i in range(2): + item = random.randint(0, 256) + self.queue.put(item) + print('Antrian menghasilkan : no antrian %d by %s \n'\ + % (item, self.name)) + time.sleep(1) + + +class Pengunjung(Thread): + + def __init__(self, queue): + Thread.__init__(self) + self.queue = queue + + def run(self): + while True: + item = self.queue.get() + print('Pengunjung mendapatkan : %d sebagai nomor antrian dari %s \n'\ + % (item, self.name)) + self.queue.task_done() + +if __name__ == '__main__': + queue = Queue() + + t1 = Antrian(queue) + t2 = Pengunjung(queue) + + t1.start() + t2.start() + + t1.join() + t2.join() diff --git a/QUIS SISTER 1/Muhammad Syiarul Amrullah/condition.py b/QUIS SISTER 1/Muhammad Syiarul Amrullah/condition.py new file mode 100644 index 0000000..4235126 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Syiarul Amrullah/condition.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 11:44:06 2022 + +@author: syiar +""" + +import logging +import threading +import time + +LOG_FORMAT = '%(asctime)s %(threadName)-17s %(levelname)-8s %(message)s' +logging.basicConfig(level=logging.INFO, format=LOG_FORMAT) + +fuel_tanks = [] +condition = threading.Condition() + + +class Mesin(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def consume(self): + + with condition: + + if len(fuel_tanks) == 0: + logging.info('bensin telah habis') + condition.wait() + + fuel_tanks.pop() + logging.info('mesin menghabiskan 1 liter bensin') + + condition.notify() + + def run(self): + for i in range(11): + time.sleep(2) + self.consume() + + +class Fuel_tanks(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def assign(self): + + with condition: + + if len(fuel_tanks) == 10: + logging.info('fuel tanks {}. sudah penuh'.format(len(fuel_tanks))) + condition.wait() + + fuel_tanks.append(1) + logging.info('fuel tanks telah mengisi {}'.format(len(fuel_tanks))) + + condition.notify() + + def run(self): + for i in range(10): + time.sleep(0.5) + self.assign() + + +def main(): + fuel_tanks = Fuel_tanks(name='tangki bensin') + mesin = Mesin(name='mesin') + + fuel_tanks.start() + mesin.start() + + fuel_tanks.join() + mesin.join() + + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Muhammad Syiarul Amrullah/event.py b/QUIS SISTER 1/Muhammad Syiarul Amrullah/event.py new file mode 100644 index 0000000..d342cde --- /dev/null +++ b/QUIS SISTER 1/Muhammad Syiarul Amrullah/event.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 12:43:25 2022 + +@author: syiar +""" + +import logging +import threading +import time + +LOG_FORMAT = '%(asctime)s %(threadName)-17s %(levelname)-8s %(message)s' +logging.basicConfig(level=logging.INFO, format=LOG_FORMAT) + +items = ["nasi goreng", "mie goreng", "kwetiaw"] +event = threading.Event() + + +class Pelayan(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + while True: + time.sleep(2) + event.wait() + item = items.pop() + logging.info('Pelayan memberitahukan: pesanan {} telah berhasil diantar'\ + .format(item)) + +class Koki(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + for i in range(len(items)): + time.sleep(2) + item = items[-1] + logging.info('Koki memberitahukan: pesanan {} telah selesai dimasak'\ + .format(item)) + event.set() + event.clear() + +if __name__ == "__main__": + t1 = Koki() + t2 = Pelayan() + + t1.start() + t2.start() + + t1.join() + t2.join()