diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/Barrier.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/Barrier.py new file mode 100644 index 0000000..10787ea --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/Barrier.py @@ -0,0 +1,22 @@ +from random import randrange +from threading import Barrier, Thread +from time import ctime, sleep + +barrier = Barrier(2) + +print('\n ### Studi Kasus Sendiri ###') + +pengulangan = 2 + +def menunggu_barrier(name, waktu_tidur): + for i in range(pengulangan): + print('%s Bergerak pada waktu %s' % (name, ctime())) + sleep(waktu_tidur) + print('%s Menunggu di barrier %s' % (name, ctime())) + barrier.wait() + print('%s sudah selesai pada waktu %s' % (name, ctime())) + +baru = Thread(target=menunggu_barrier, args=["baru", 1]) +baru_lagi = Thread(target=menunggu_barrier, args=["baru_lagi", 10]) +baru.start() +baru_lagi.start() diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/Condition.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/Condition.py new file mode 100644 index 0000000..fa56241 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/Condition.py @@ -0,0 +1,67 @@ +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 = [] +condition = threading.Condition() +print('\n ### Studi Kasus Sendiri ###') + +class Pelanggan(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def beli(self): + with condition: + if len(items) > 5 and len(items) < 10: + logging.info('Tidak ada yang bisa dibeli') + condition.wait() + + items.pop() + logging.info('Beli 1 roti') + + condition.notify() + + def run(self): + for i in range(10): + time.sleep(2) + self.beli() + +class ProdusenRoti(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def membuat(self): + + with condition: + + if len(items) == 15: + logging.info('roti diproduksi {}. Berhenti'.format(len(items))) + condition.wait() + + items.append(1) + logging.info('total roti {}'.format(len(items))) + + condition.notify() + + def run(self): + for i in range(20): + time.sleep(0.5) + self.membuat() + + +def main(): + produsen = ProdusenRoti(name='Produsen Roti') + konsumen = Pelanggan(name='Konsumen') + + produsen.start() + konsumen.start() + + produsen.join() + konsumen.join() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/Event.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/Event.py new file mode 100644 index 0000000..34ae565 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/Event.py @@ -0,0 +1,48 @@ +import logging +import threading +import time +import random +import names # Didapatkan dengan pip install names + +LOG_FORMAT = '%(asctime)s %(threadName)-17s %(levelname)-8s %(message)s' +logging.basicConfig(level=logging.INFO, format=LOG_FORMAT) + +people = [] +event = threading.Event() + + +class Gamer(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + while True: + time.sleep(random.randint(0, 5)) + event.wait() + orang = people.pop() + logging.info('Gamer megabari orang bernama: {} sudah selesai oleh {}'\ + .format(orang, self.name)) + +class ComputerSeller(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + for i in range(random.randint(0, 19)): + time.sleep(random.randint(0, 5)) + orang = names.get_full_name() + people.append(orang) + logging.info('Computer Seller mengabari: orang bernama {} oleh {}'\ + .format(orang, self.name)) + event.set() + event.clear() + +if __name__ == "__main__": + pertama = ComputerSeller() + kedua = Gamer() + + pertama.start() + kedua.start() + + pertama.join() + kedua.join() diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass.py new file mode 100644 index 0000000..dc9bcc0 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass.py @@ -0,0 +1,67 @@ +import time +from random import randint +from threading import Thread +from time import ctime + +print('\n ### Perocbaan Sendiri ###') + +class ProduksiThread (Thread): + def __init__(self, nama, umur, asal, mulai_eksekusi): + Thread.__init__(self) + self.nama = nama + self.umur = umur + self.asal = asal + self.mulai_eksekusi = mulai_eksekusi + def run(self): + print ("---> " + self.nama + \ + " berjalan, dengan umur "\ + + str(self.umur) + " Berasal dari " + self.asal + "Berangkat pada" + self.mulai_eksekusi +"\n") + time.sleep(randint(1,10)) + print ("---> " + self.nama + " selesai dengan Waktu " + self.mulai_eksekusi + "\n") + + +def main(): + start_time = time.time() + + # Thread Creation + orang1 = ProduksiThread("Orang#1 ", randint(1,10), "Indonesia", ctime()) + orang2 = ProduksiThread("Orang#2 ", randint(1,10), "Indonesia", ctime()) + orang3 = ProduksiThread("Orang#3 ", randint(1,10), "Indonesia", ctime()) + orang4 = ProduksiThread("Orang#4 ", randint(1,10), "Indonesia", ctime()) + orang5 = ProduksiThread("Orang#5 ", randint(1,10), "Indonesia", ctime()) + orang6 = ProduksiThread("Orang#6 ", randint(1,10), "Indonesia", ctime()) + orang7 = ProduksiThread("Orang#7 ", randint(1,10), "Indonesia", ctime()) + orang8 = ProduksiThread("Orang#8 ", randint(1,10), "Indonesia", ctime()) + orang9 = ProduksiThread("Orang#9 ", randint(1,10), "Indonesia", ctime()) + + # Thread Running + orang1.start() + orang2.start() + orang3.start() + orang4.start() + orang5.start() + orang6.start() + orang7.start() + orang8.start() + orang9.start() + + # Thread joining + orang1.join() + orang2.join() + orang3.join() + orang4.join() + orang5.join() + orang6.join() + orang7.join() + orang8.join() + orang9.join() + + # End + print("End") + + #Execution Time + print("--- %s seconds ---" % (time.time() - start_time)) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass_lock.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass_lock.py new file mode 100644 index 0000000..50848f3 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass_lock.py @@ -0,0 +1,78 @@ +import threading +import time +import os +from time import ctime +from threading import Thread +from random import randint + +# Lock Definition +threadLock = threading.Lock() + +class ProduksiThread (Thread): + def __init__(self, nama, umur, asal, mulai_eksekusi): + Thread.__init__(self) + self.nama = nama + self.umur = umur + self.asal = asal + self.mulai_eksekusi = mulai_eksekusi + def run(self): + #Acquire the Lock + threadLock.acquire() + print ("---> " + self.nama + \ + " berjalan, dengan umur "\ + + str(self.umur) + " Berasal dari " + self.asal + "Berangkat pada" + self.mulai_eksekusi +"\n") + time.sleep(randint(1,10)) + print ("---> " + self.nama + " selesai dengan Waktu " + self.mulai_eksekusi + "\n") + #Release the Lock + threadLock.release() + + +def main(): + start_time = time.time() + # Thread Creation + orang1 = ProduksiThread("Orang#1 ", randint(1,10), "Indonesia", ctime()) + orang2 = ProduksiThread("Orang#2 ", randint(1,10), "Indonesia", ctime()) + orang3 = ProduksiThread("Orang#3 ", randint(1,10), "Indonesia", ctime()) + orang4 = ProduksiThread("Orang#4 ", randint(1,10), "Indonesia", ctime()) + orang5 = ProduksiThread("Orang#5 ", randint(1,10), "Indonesia", ctime()) + orang6 = ProduksiThread("Orang#6 ", randint(1,10), "Indonesia", ctime()) + orang7 = ProduksiThread("Orang#7 ", randint(1,10), "Indonesia", ctime()) + orang8 = ProduksiThread("Orang#8 ", randint(1,10), "Indonesia", ctime()) + orang9 = ProduksiThread("Orang#9 ", randint(1,10), "Indonesia", ctime()) + + # Thread Running + orang1.start() + orang2.start() + orang3.start() + orang4.start() + orang5.start() + orang6.start() + orang7.start() + orang8.start() + orang9.start() + + # Thread joining + orang1.join() + orang2.join() + orang3.join() + orang4.join() + orang5.join() + orang6.join() + orang7.join() + orang8.join() + orang9.join() + + + # End + print("End") + + #Execution Time + print("--- %s seconds ---" % (time.time() - start_time)) + + +if __name__ == "__main__": + main() + + + + diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass_lock_2.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass_lock_2.py new file mode 100644 index 0000000..690ebb1 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass_lock_2.py @@ -0,0 +1,78 @@ +import threading +import time +import os +from time import ctime +from threading import Thread +from random import randint + +# Lock Definition +threadLock = threading.Lock() + +class ProduksiThread (Thread): + def __init__(self, nama, umur, asal, mulai_eksekusi): + Thread.__init__(self) + self.nama = nama + self.umur = umur + self.asal = asal + self.mulai_eksekusi = mulai_eksekusi + def run(self): + #Acquire the Lock + threadLock.acquire() + print ("---> " + self.nama + \ + " berjalan, dengan umur "\ + + str(self.umur) + " Berasal dari " + self.asal + "Berangkat pada" + self.mulai_eksekusi +"\n") + threadLock.release() + time.sleep(randint(1,10)) + print ("---> " + self.nama + " selesai dengan Waktu " + self.mulai_eksekusi + "\n") + #Release the Lock + + +def main(): + start_time = time.time() + + # Thread Creation + orang1 = ProduksiThread("Orang#1 ", randint(1,10), "Indonesia", ctime()) + orang2 = ProduksiThread("Orang#2 ", randint(1,10), "Indonesia", ctime()) + orang3 = ProduksiThread("Orang#3 ", randint(1,10), "Indonesia", ctime()) + orang4 = ProduksiThread("Orang#4 ", randint(1,10), "Indonesia", ctime()) + orang5 = ProduksiThread("Orang#5 ", randint(1,10), "Indonesia", ctime()) + orang6 = ProduksiThread("Orang#6 ", randint(1,10), "Indonesia", ctime()) + orang7 = ProduksiThread("Orang#7 ", randint(1,10), "Indonesia", ctime()) + orang8 = ProduksiThread("Orang#8 ", randint(1,10), "Indonesia", ctime()) + orang9 = ProduksiThread("Orang#9 ", randint(1,10), "Indonesia", ctime()) + + # Thread Running + orang1.start() + orang2.start() + orang3.start() + orang4.start() + orang5.start() + orang6.start() + orang7.start() + orang8.start() + orang9.start() + + # Thread joining + orang1.join() + orang2.join() + orang3.join() + orang4.join() + orang5.join() + orang6.join() + orang7.join() + orang8.join() + orang9.join() + + # End + print("End") + + #Execution Time + print("--- %s seconds ---" % (time.time() - start_time)) + + +if __name__ == "__main__": + main() + + + + diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/Rlock.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/Rlock.py new file mode 100644 index 0000000..c603f0b --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/Rlock.py @@ -0,0 +1,72 @@ +import threading +import time +import random + + +class Tugas: + def __init__(self): + self.lock = threading.RLock() + self.total_items = 0 + + def eksekusi(self, value): + with self.lock: + self.total_items += value + + def tambah(self, ekstra): + with self.lock: + self.eksekusi(1 * ekstra) + + def kurang(self, ekstra): + with self.lock: + self.eksekusi(-1 * ekstra) + +def tambah_tugas(tugas, items): + print("N° {} tugas yang perlu ditambahkan \n".format(items)) + while items: + if items > 3: + tugas.tambah(random.randint(10,20)) + else: + tugas.tambah(1) + time.sleep(1) + items -= 1 + print("Menambahkan tugas -->{} tugas yang perlu ditambahkan \n".format(items)) + + + +def kurangi_tugas(tugas, items): + print("N° {} tugas yang perlu dikurangkan \n".format(items)) + while items: + if items < 3: + tugas.kurang(random.randint(10,20)) + else: + tugas.kurang(1) + time.sleep(1) + items -= 1 + print("Mengurangi tugas -->{} tugas yang perlu dikurangkan \n".format(items)) + + +def main(): + waktu_mulai = time.time() + + tugas = Tugas() + + t1 = threading.Thread(target=tambah_tugas, \ + args=(tugas, random.randint(10,20))) + t2 = threading.Thread(target=kurangi_tugas, \ + args=(tugas, random.randint(1,10))) + + t1.start() + t2.start() + + + t1.join() + t2.join() + + # End + print("End") + + #Execution Time + print("--- %s seconds ---" % (time.time() - waktu_mulai)) + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/Semaphore.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/Semaphore.py new file mode 100644 index 0000000..1b46069 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/Semaphore.py @@ -0,0 +1,42 @@ +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) +antrean = 0 + + +def pelanggan(): + logging.info('Pelanggan sedang antre') + semaphore.acquire() + logging.info('Pelanggan di panggil: antrean ke {}'.format(antrean)) + + +def dokterHewan(): + global antrean + time.sleep(3) + antrean = random.randint(0, 1000) + logging.info('Dokter memanggil: antrean ke {}'.format(antrean)) + semaphore.release() + logging.info('Berpindah') + + +def main(): + for i in range(1): + t1 = threading.Thread(target=pelanggan) + t2 = threading.Thread(target=dokterHewan) + + t1.start() + t2.start() + + t1.join() + t2.join() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/Thread_definition.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/Thread_definition.py new file mode 100644 index 0000000..8b434bb --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/Thread_definition.py @@ -0,0 +1,18 @@ +import threading + + +def new_func(thread_number): + return print('fungsi ini dipanggil oleh N°{}'.format(thread_number)) + + +def main(): + threads = [] + for i in range(20): + if (i % 5) == 0: + t = threading.Thread(target=new_func, args=(i,)) + threads.append(t) + t.start() + t.join() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/Thread_determine.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/Thread_determine.py new file mode 100644 index 0000000..037a0fc --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/Thread_determine.py @@ -0,0 +1,57 @@ +import threading +import time +from random import randint + +def First_Thread(): + if threading.activeCount() == 0: + time.sleep(randint(5,10)) + print (threading.currentThread().getName()+str('--> mulai \n')) + time.sleep(2) + print (threading.currentThread().getName()+str( '--> selesai \n')) + return + +def Secon_Thread(): + if threading.activeCount() > 2: + time.sleep(randint(5,10)) + print (threading.currentThread().getName()+str('--> mulai \n')) + time.sleep(2) + print (threading.currentThread().getName()+str( '--> selesai \n')) + return + +def Third_Thread(): + if threading.activeCount() > 3: + time.sleep(randint(5,10)) + print (threading.currentThread().getName()+str('--> mulai \n')) + time.sleep(2) + print (threading.currentThread().getName()+str( '--> selesai \n')) + return + + +if __name__ == "__main__": + + mulai = time.time() + + t1 = threading.Thread(name='thread pertama', target=First_Thread) + t2 = threading.Thread(name='thread kedua', target=Secon_Thread) + t3 = threading.Thread(name='thread ketiga',target=Third_Thread) + + print("No. of active threads: " + str(threading.activeCount())) + if threading.activeCount() > 0: + time.sleep(randint(5,10)) + + t1.start() + + print("No. of active threads: " + str(threading.activeCount())) + t2.start() + t3.start() + print("No. of active threads: " + str(threading.activeCount())) + + t1.join() + t2.join() + t3.join() + + # End + print("Selesai") + + #Execution Time + print("--- %s seconds ---" % (time.time() - mulai)) diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/Thread_name_and_processes.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/Thread_name_and_processes.py new file mode 100644 index 0000000..437651c --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/Thread_name_and_processes.py @@ -0,0 +1,43 @@ +from threading import Thread +import time +import os + +class MyThreadClass (Thread): + def __init__(self, nama, umur): + Thread.__init__(self) + self.nama = nama + self.umur = umur + + def run(self): + print("Pemain Dengan Nomor Punggung {} Sudah berusia {}".format(self.nama, self.umur)) + +def main(): + from random import randint + # Thread Creation + mulai = time.time() + for i in range(21): + thread1 = MyThreadClass("#" + str(i), randint(17, 23)) + thread2 = MyThreadClass("#" + str(i + 5), randint(17, 23)) + + # Thread Running + thread1.start() + time.sleep(randint(5,10)) + thread2.start() + + + # Thread joining + thread1.join() + thread2.join() + + # End + print("End") + + # Waktu Eksekusi + print("--- %s seconds ---" % (time.time() - mulai)) + +if __name__ == "__main__": + main() + + + + diff --git a/QUIS SISTER 1/Muhammad Nazhim Maulana/Threading_with_queue.py b/QUIS SISTER 1/Muhammad Nazhim Maulana/Threading_with_queue.py new file mode 100644 index 0000000..416a129 --- /dev/null +++ b/QUIS SISTER 1/Muhammad Nazhim Maulana/Threading_with_queue.py @@ -0,0 +1,40 @@ +""""Thread synchronisation with queue""" + +from threading import Thread +from queue import Queue +import time +from random import randint + +def func(q, nomor_tugas): + while True: + task = q.get() + time.sleep(randint(4,9)) + q.task_done() + print(f'Anto #{nomor_tugas} sedang mengerjakan tugas #{task} dalam antrean.') + +q = Queue() + +print('### Antrean Pengerjaan Tugas ###') +mulai = time.time() + +# Mulai proses antrean +for i in range(4): + pekerja = Thread(target=func, args=(q, i,), daemon=True) + if i > 2: + time.sleep(randint(6,9)) + else: + time.sleep(randint(0,1)) + # Memulai Thread + pekerja.start() + +# Memasukkan ke dalam Antrean +for j in range(10): + q.put(j) + +q.join() + +# End +print("Antrean Selesai") + +#Execution Time +print("--- %s seconds ---" % (time.time() - mulai)) \ No newline at end of file