From e5da4b964ac659711e9c9a52074b0d82471e7110 Mon Sep 17 00:00:00 2001 From: nurikhsanisf Date: Tue, 29 Mar 2022 22:35:16 +0700 Subject: [PATCH 1/3] Tugas Sistem Tersebar Chapter1 bagian Nur Ikhsani --- Chapter01/studiKasus/filepasiencovid.py | 22 ++++++++++++++++++++++ Chapter01/studiKasus/listjenistumbuhan.py | 14 ++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 Chapter01/studiKasus/filepasiencovid.py create mode 100644 Chapter01/studiKasus/listjenistumbuhan.py diff --git a/Chapter01/studiKasus/filepasiencovid.py b/Chapter01/studiKasus/filepasiencovid.py new file mode 100644 index 0000000..bc328b5 --- /dev/null +++ b/Chapter01/studiKasus/filepasiencovid.py @@ -0,0 +1,22 @@ +#melakukan percobaan mengimplementasi Input pada file +f = open ('inputPasienCovid.txt', 'w') #membaca file di luar +nik = input ("Masukan NIK :") +nama = input("Masukan Nama : ") +alamat = input("Masukan Alamat : ") +umur = input("Masukan Usia : ") +jeniskelamin = input("Masukan Jenis Kelamin: ") +nohp = input("Masukan Nohp : ") +gejala = input("Masukan Gejala : ") +f.write ("NIK : " + nik + "\n") #menulis ke dalam file +f.write ("Nama : " + nama + "\n") +f.write ("Alamat : " + alamat + "\n") +f.write ("Umur : " + umur + "\n") +f.write ("Jenis Kelamin : " + jeniskelamin + "\n") +f.write ("No Hp : " + nohp + "\n") +f.write ("Gejala : " + gejala + "\n") +f.close()#keluarkan file nya +f = open ('inputPasienCovid.txt') #buka file +content = f.read() +print (content) #render content yang ada di dalam file nya + +f.close() diff --git a/Chapter01/studiKasus/listjenistumbuhan.py b/Chapter01/studiKasus/listjenistumbuhan.py new file mode 100644 index 0000000..9785e3a --- /dev/null +++ b/Chapter01/studiKasus/listjenistumbuhan.py @@ -0,0 +1,14 @@ +bunga =["Angrek", "Mawar", "Melati", "Kamboja", "Teratai", "Lily", "Tulip", "Kertas", "Asoka", "Bougenville", "Kemuning "] +print(bunga) +print(bunga[0]) +print(bunga[6:9]) +bunga[0] = "Anggrek Ungu" +bunga[1] = "Mawar Putih" +print(bunga) +KeteranganMawarPutih ={"Nama":"Mawar Putih"} +print(KeteranganMawarPutih) +pohon = ("Mangga", "Nangka", "Rambutan", "Jambu Batu", "Jambu Air", "Pisang", "Duren") +print(pohon) +mengukurPanjangData = len +print(mengukurPanjangData(bunga)) +print(mengukurPanjangData(pohon)) \ No newline at end of file From b4e869748687e55f48795a546b14359cc234b9ae Mon Sep 17 00:00:00 2001 From: ayulestarinasution Date: Tue, 29 Mar 2022 23:00:12 +0700 Subject: [PATCH 2/3] Study Kasus --- Chapter01/studiKasus/dir.py | 16 ++++++++++++++++ Chapter01/studiKasus/flow.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 Chapter01/studiKasus/dir.py create mode 100644 Chapter01/studiKasus/flow.py diff --git a/Chapter01/studiKasus/dir.py b/Chapter01/studiKasus/dir.py new file mode 100644 index 0000000..c154c45 --- /dev/null +++ b/Chapter01/studiKasus/dir.py @@ -0,0 +1,16 @@ +masuk=int(input("Masukkan Jam Masuk = ")) +keluar=int(input("Masukkan Jam Keluar =")) +lama=keluar-masuk +payment=12000 +print("Lama Mengajar = ", lama, "jam") +if lama <=1: + satu_jam_pertama=payment + print("Biaya Mengajar= Rp", satu_jam_pertama) +elif lama <10: + biaya_selanjutnya = (lama+1)*3000+payment + print("Biaya Mengajar = Rp", biaya_selanjutnya) +elif lama >= 10: + print("Biaya Mengajar = Rp", 1000000) +else: + print("nul") + \ No newline at end of file diff --git a/Chapter01/studiKasus/flow.py b/Chapter01/studiKasus/flow.py new file mode 100644 index 0000000..2c5960a --- /dev/null +++ b/Chapter01/studiKasus/flow.py @@ -0,0 +1,33 @@ + +# IF + +# In this program, we check if the number is positive or negative or zero and +# display an appropriate message + +# Flow Control + +x=7 +if x >10: + print("x is the value is big.") +elif x > 0: + print("x the value is small.") +else: + print("x is not positive.") + +# Array + +# Variabel array +genap = [14,24,56,80] +ganjil = [13,55,73,23] + +nap = 0 +jil = 0 + +# Buat looping for menggunakanvariable dari array yang udah dibuat +for val in genap: + nap = nap+val + for val in ganjil: + jil = jil+val + +print("Ini adalah bilangan Genap", nap ) +print("Ini adalah bilangan Ganjil", jil ) \ No newline at end of file From adb6c7b985312f44601549f1df69f671cbd27173 Mon Sep 17 00:00:00 2001 From: nurikhsanisf Date: Wed, 20 Apr 2022 13:28:36 +0700 Subject: [PATCH 3/3] mengembalikan file --- .../Condition.py | 71 +++++++++++++++++++ .../Event.py | 48 +++++++++++++ .../MyThreadClass.py | 57 +++++++++++++++ .../MyThreadClass_lock.py | 61 ++++++++++++++++ .../MyThreadClass_lock_2.py | 62 ++++++++++++++++ .../Thread_determine.py | 36 ++++++++++ .../Thread_name_and_processes.py | 38 ++++++++++ .../Threading_with_queue.py | 54 ++++++++++++++ .../barrier.py | 28 ++++++++ .../rlock.py | 68 ++++++++++++++++++ .../semaphore.py | 46 ++++++++++++ .../thread_definition.py | 18 +++++ 12 files changed, 587 insertions(+) create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Condition.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Event.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass_lock.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass_lock_2.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Thread_determine.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Thread_name_and_processes.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Threading_with_queue.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/barrier.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/rlock.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/semaphore.py create mode 100644 QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/thread_definition.py diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Condition.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Condition.py new file mode 100644 index 0000000..cdf6c8b --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Condition.py @@ -0,0 +1,71 @@ +# Studi kasus tentang pembeliah Hp disuatu toko +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() + + +class Pembeli(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def pembeli(self): + + with condition: + + if len(items) == 0: + logging.info('tidak ada hp yang dibeli oleh pembeli') + condition.wait() + + items.pop() + logging.info('pembeli membeli 1 hp') + + condition.notify() + + def run(self): + for i in range(20): + time.sleep(2) + self.pembeli() + + +class Penjual(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def penjual(self): + + with condition: + + if len(items) == 10: + logging.info('jumlah hp yang ditawarkan penjual sekarang {}. buah'.format(len(items))) + condition.wait() + + items.append(1) + logging.info('penjual menawarkan hp dengan jumlah {} buah'.format(len(items))) + + condition.notify() + + def run(self): + for i in range(20): + time.sleep(0.5) + self.penjual() + + +def main(): + producer = Penjual(name='Penjual') + consumer = Pembeli(name='Pembeli') + + producer.start() + consumer.start() + + producer.join() + consumer.join() + + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Event.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Event.py new file mode 100644 index 0000000..eacaae7 --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Event.py @@ -0,0 +1,48 @@ +#studi kasus tentan pemeriksaan kandungan pasien +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) + +items = [] +event = threading.Event() + + +class Pasien(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('Pasien notify: {} pasien menuju ruangan bidan {}'\ + .format(item, self.name)) + +class Bidan(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self): + for i in range(5): + time.sleep(2) + item = random.randint(0, 100) + items.append(item) + logging.info('Bidan notify: Bidan mengecek kandungan pasien {}'\ + .format(item, self.name)) + event.set() + event.clear() + +if __name__ == "__main__": + t1 = Bidan() + t2 = Pasien() + + t1.start() + t2.start() + + t1.join() + t2.join() diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass.py new file mode 100644 index 0000000..3a58f1e --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass.py @@ -0,0 +1,57 @@ + +#studi kasus tentang perlombaan cerdas cermat mengenai pendaftaran +import time +import os +from random import randint +from threading import Thread + +class Tes (Thread): + def __init__(self, name, duration): + Thread.__init__(self) + self.name = name + self.duration = duration + def run(self): + print ("---> " + self.name + \ + " menggunkan kode pendaftaran yaitu "\ + + str(os.getpid()) + "\n") + time.sleep(self.duration) + print ("---> " + self.name + " Segera dilaksanakan\n") + + +def main(): + start_time = time.time() + + # Thread Creation + thread1 = Tes("Perlombaan ini ", randint(1,10)) + + + + + + # Thread Running + thread1.start() + + + + + + # Thread joining + thread1.join() + + + + + + # End + print("Selamat Mengikuti Perlombaan") + + #Execution Time + print("Waktu yang diperlukan dalam mendaftar %s seconds perorang yang mendaftar" % (time.time() - start_time)) + + +if __name__ == "__main__": + main() + + + + diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass_lock.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass_lock.py new file mode 100644 index 0000000..cb869ce --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass_lock.py @@ -0,0 +1,61 @@ +#studi kasus tentang perlombaan cerdas cermat mengenai ruangan dan soal +import threading +import time +import os +from threading import Thread +from random import randint + +# Lock Definition +threadLock = threading.Lock() + +class MyThreadClass (Thread): + def __init__(self, name, duration): + Thread.__init__(self) + self.name = name + self.duration = duration + def run(self): + #Acquire the Lock + threadLock.acquire() + print ("---> " + self.name + \ + " kodenya adalah "\ + + str(os.getpid()) + "\n") + time.sleep(self.duration) + print ("---> " + self.name + " selesai diberikan kodenya\n") + #Release the Lock + threadLock.release() + + +def main(): + start_time = time.time() + # Thread Creation + thread1 = MyThreadClass("Ruangan Fisika yang digunakan ", randint(1,10)) + thread2 = MyThreadClass("Soal 1", randint(1,10)) + + + + # Thread Running + thread1.start() + thread2.start() + + + + # Thread joining + thread1.join() + thread2.join() + + + + # End + print("Selamat Datang di Ruangan Fisika para peserta acara lomba cerdas cermat ") + print("Selamat Mengerjakan soal") + + #Execution Time + print("waktu yang dibutuhkan untuk mengerjakan soal %s seconds soal" % (time.time() - start_time)) + + +if __name__ == "__main__": + main() + + + + diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass_lock_2.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass_lock_2.py new file mode 100644 index 0000000..1b768e7 --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/MyThreadClass_lock_2.py @@ -0,0 +1,62 @@ +#studi kasus tentang perlombaan cerdas cermat mengenai ruangan dan soal +import threading +import time +import os +from threading import Thread +from random import randint + +# Lock Definition +threadLock = threading.Lock() + +class Tes (Thread): + def __init__(self, name, duration): + Thread.__init__(self) + self.name = name + self.duration = duration + def run(self): + #Acquire the Lock + threadLock.acquire() + print ("---> " + self.name + \ + " kodenya adalah "\ + + str(os.getpid()) + "\n") + threadLock.release() + time.sleep(self.duration) + print ("---> " + self.name + " telah siap \n") + #Release the Lock + + +def main(): + start_time = time.time() + + # Thread Creation + thread1 = Tes("Ruangan Matematika yang digunakan ", randint(1,10)) + thread2 = Tes("Soal 2", randint(1,10)) + + + + # Thread Running + thread1.start() + thread2.start() + + + + # Thread joining + thread1.join() + thread2.join() + + + # End + print("Selamat Datang di Ruangan Matematika para peserta acara lomba cerdas cermat ") + print("Selamat Mengerjakan ") + + #Execution Time + print("waktu yang dibutuhkan untuk mengerjakan soal %s seconds soal" % (time.time() - start_time)) + + + +if __name__ == "__main__": + main() + + + + diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Thread_determine.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Thread_determine.py new file mode 100644 index 0000000..b1563cf --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Thread_determine.py @@ -0,0 +1,36 @@ +# studi kasus cerdas cermat mengenai peserta yang memulai mengerjakan +import threading +import time + +def peserta1(): + print (threading.currentThread().getName()+str('--> memulai mengerjakan \n')) + time.sleep(2) + print (threading.currentThread().getName()+str( '--> berhenti mengerjakan \n')) + return + +def peserta2(): + print (threading.currentThread().getName()+str('--> memulai mengerjakan \n')) + time.sleep(2) + print (threading.currentThread().getName()+str( '--> berhenti mengerjakan \n')) + return + +def peserta3(): + print (threading.currentThread().getName()+str('--> memulai mengerjakan \n')) + time.sleep(2) + print (threading.currentThread().getName()+str( '--> berhenti mengerjakan \n')) + return + + +if __name__ == "__main__": + + t1 = threading.Thread(name='peserta dengan nomor urut 1', target=peserta1) + t2 = threading.Thread(name='peserta dengan nomor urut 2', target=peserta2) + t3 = threading.Thread(name='peserta dengan nomor urut 3',target=peserta3) + + t1.start() + t2.start() + t3.start() + + t1.join() + t2.join() + t3.join() diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Thread_name_and_processes.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Thread_name_and_processes.py new file mode 100644 index 0000000..41b062c --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Thread_name_and_processes.py @@ -0,0 +1,38 @@ +#studi kasus tentang perlombaan cerdas cermat soal yang dibagikan +from threading import Thread +import time +import os + +class Tes (Thread): + def __init__(self, name): + Thread.__init__(self) + self.name = name + + def run(self): + print("Soal dibagikan kepada peserta {}".format(self.name)) #, " is {} \n".format(os.getpid())) + +def main(): + from random import randint + # Thread Creation + thread1 = Tes("soal 1 ") + thread2 = Tes("soal 2 ") + + # Thread Running + thread1.start() + thread2.start() + + + # Thread joining + thread1.join() + thread2.join() + + # End + print("soal selesai dibagikan") + + +if __name__ == "__main__": + main() + + + + diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Threading_with_queue.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Threading_with_queue.py new file mode 100644 index 0000000..b4a3f7c --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/Threading_with_queue.py @@ -0,0 +1,54 @@ +""""Thread synchronisation with queue""" +#studi kasus tentang antrian pemberian zakat + +from threading import Thread +from queue import Queue +import time +import random + + +class PemberiZakat(Thread): + + def __init__(self, queue): + Thread.__init__(self) + self.queue = queue + + def run(self): + for i in range(5): + item = random.randint(0, 256) + self.queue.put(item) + print('Pemberi Zakat notify : penerima zakat dengan nomor %d ditambahkan pada antrian oleh %s\n'\ + % (item, self.name)) + time.sleep(1) + + +class PenerimaZakat(Thread): + + def __init__(self, queue): + Thread.__init__(self) + self.queue = queue + + def run(self): + while True: + item = self.queue.get() + print('Penerima Zakat notify :nomor %d penerima zakat dimunculkan oleh %s'\ + % (item, self.name)) + self.queue.task_done() + +if __name__ == '__main__': + queue = Queue() + + t1 = PemberiZakat(queue) + t2 = PenerimaZakat(queue) + t3 = PenerimaZakat(queue) + t4 = PenerimaZakat(queue) + + t1.start() + t2.start() + t3.start() + t4.start() + + t1.join() + t2.join() + t3.join() + t4.join() diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/barrier.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/barrier.py new file mode 100644 index 0000000..951117b --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/barrier.py @@ -0,0 +1,28 @@ +#studi kasus tentang perlombaan cerdas cermat +from random import randrange +from threading import Barrier, Thread +from time import ctime, sleep + +num_cerdascermat = 5 +hasilakhir = Barrier(num_cerdascermat) +peserta = ['nisa', 'rama', 'titin', 'nur', 'ayu'] + +def siswa(): + name = peserta.pop() + sleep(randrange(2, 7)) # menunggu dengan sesuai waktu dari 2 samap denga 7 secara random + print('%s selesai mengerjakan pada: %s \n' % (name, ctime())) + hasilakhir.wait() #menunggu semua thread selesai digunakan untuk memblokir + #thread yang melakukan panggilan + +def main(): + threads = [] + print('mulai mengerjakan!!') + for i in range(num_cerdascermat): #membuat tread baru agar dapar menjalankan function + threads.append(Thread(target=siswa)) + threads[-1].start() #menunggu thread selesai + for thread in threads: + thread.join() + print('selesai!')#tread selesai + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/rlock.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/rlock.py new file mode 100644 index 0000000..4a8d850 --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/rlock.py @@ -0,0 +1,68 @@ +#studi kasus tentang buah mangga +import threading +import time +import random + + +class BoxMangga: # kelas boxmangga dengan 2 metode yaitu add dan remove yang + #dapat mengakases metode execute + def __init__(self): + self.lock = threading.RLock() #pemanggilan rlock dilakukan dengan + #metode init pada kelas box mangga + self.total_items = 0 + + def execute(self, value): # untuk menambahkan dan menghapus item + #dapat mengakases ke metode execute dengan di atur oleh rlock + 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 adder(boxmangga, items):# fungsi dipanggil oleh kedu threads yang memiliki + # kelas boxmangga dan items agar dapat ditambahkan dan di hapus sbagai parameter. + print("Banyaknya mangga {} yang ditambahkan \n".format(items)) + while items: + boxmangga.add() + time.sleep(1) + items -= 1 + print("stok buah mangga saat ini -->{} buah \n".format(items)) + + + +def remover(boxmangga, items): + print("banyaknya mangga {} yang di jual \n".format(items)) + while items: + boxmangga.remove() + time.sleep(1) + items -= 1 + print("mangga yang dijual -->{} buah \n".format(items)) + + +def main(): # pada total item dapat ditambah dan dihapus dari kotak kedua akanganya + #akan berbeda dan eksekusi akan berakhir ketika kedua metode telah selesai + items = 2 + box = BoxMangga() + + t1 = threading.Thread(target=adder, \ + args=(box, random.randint(1,10))) # pada t1 dan t2 telah + #terkait dengan adder da remove + t2 = threading.Thread(target=remover, \ + args=(box, random.randint(1,10)))#fungsinya akan aktif + #ketika jumlahitem lebih besar dari nol + + t1.start() + t2.start() + + + t1.join() + t2.join() + + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/semaphore.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/semaphore.py new file mode 100644 index 0000000..e3ac468 --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/semaphore.py @@ -0,0 +1,46 @@ +#studi kasus tentang pengocokan arisan +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) #menginisialisasi semphore ke 0 maka dapat +#memperoleh event semphore agardapat mengsingkronkan dua atau lebih thread +item = 0 #sumber daya + + +def pemenangarisan(): #akam memperoleh data dari methode acquire jika perhitungannya + #0 dan akan memblokir methode acquire namun ketika perthitungan smaphorenya + # #lebih dari 0 maka nilai akan berkurang. + logging.info('pengocokan arisan dimulai peserta harap menunggu') + semaphore.acquire() # ketika nomorarisan melepas semaphore maka pemenanarisan + #akan memperoleh dan melakukan run pada bagian ini + logging.info('pemenang arisan dengan nomor {} harap dapat datang ke tempat'.format(item)) + + +def nomorarisan(): #akam membuat item dengan memanggil methode release + global item + time.sleep(3) + item = random.randint(1, 10) + logging.info('nomor {} adalah pemenang arisan'.format(item)) + semaphore.release()# dipanggil untuk membebaskan sumber daya + + +def main(): + for i in range(1): + t1 = threading.Thread(target=pemenangarisan) + t2 = threading.Thread(target=nomorarisan) + + t1.start() + t2.start() + + t1.join() + t2.join() + + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/thread_definition.py b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/thread_definition.py new file mode 100644 index 0000000..592f9f2 --- /dev/null +++ b/QUIS SISTER 1/Nur Ikhsani Suwady Futri/1194029 Nur Ikhsani Suwandy Futri 3a D4 TI studi_kasus/thread_definition.py @@ -0,0 +1,18 @@ +#studi kasus tentang hp digudang +import threading + + +def my_hp(thread_number): + return print('Jumlah Handphone yang ada digudang {} buah'.format(thread_number)) + + +def main(): + threads = [] + for i in range(10): + t = threading.Thread(target=my_hp, args=(i,)) + threads.append(t) + t.start() + t.join() + +if __name__ == "__main__": + main()