From 4cfdfbbb91acf910f9966f8807917aef8140d7de Mon Sep 17 00:00:00 2001 From: rizaluardi <57054594+KurniaHayati@users.noreply.github.com> Date: Wed, 20 Apr 2022 20:17:05 +0700 Subject: [PATCH] update tugas chapter 2 update tugas chapter 2 kurnia hayati --- QUIS SISTER 1/Kurnia Hayati/Barrier.py | 26 +++++++ QUIS SISTER 1/Kurnia Hayati/Condition.py | 70 ++++++++++++++++++ QUIS SISTER 1/Kurnia Hayati/Event.py | 38 ++++++++++ QUIS SISTER 1/Kurnia Hayati/MyThreadClass.py | 49 +++++++++++++ .../Kurnia Hayati/MyThreadClass_lock.py | 73 +++++++++++++++++++ .../Kurnia Hayati/MyThreadClass_lock_2.py | 54 ++++++++++++++ QUIS SISTER 1/Kurnia Hayati/Rlock.py | 25 +++++++ QUIS SISTER 1/Kurnia Hayati/Semaphore.py | 33 +++++++++ .../Kurnia Hayati/Thread_definition.py | 17 +++++ .../Kurnia Hayati/Thread_determine.py | 30 ++++++++ .../Thread_name_and_processes.py | 33 +++++++++ .../Kurnia Hayati/Threading_with_queue.py | 55 ++++++++++++++ 12 files changed, 503 insertions(+) create mode 100644 QUIS SISTER 1/Kurnia Hayati/Barrier.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/Condition.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/Event.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/MyThreadClass.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/MyThreadClass_lock.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/MyThreadClass_lock_2.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/Rlock.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/Semaphore.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/Thread_definition.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/Thread_determine.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/Thread_name_and_processes.py create mode 100644 QUIS SISTER 1/Kurnia Hayati/Threading_with_queue.py diff --git a/QUIS SISTER 1/Kurnia Hayati/Barrier.py b/QUIS SISTER 1/Kurnia Hayati/Barrier.py new file mode 100644 index 0000000..2074ff6 --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/Barrier.py @@ -0,0 +1,26 @@ +from random import randrange +from threading import Barrier, Thread +from time import ctime, sleep + +student = 5 +finish_line = Barrier(student) +students = ['fanny', 'devita', 'inggarini'] + +def siswa(): + name = students.pop() #untuk menghasilkan data satu persatu + sleep(randrange(2, 5)) + print('%s submit at: %s \n' % (name, ctime())) + finish_line.wait() + +def main(): + threads = [] + print('Mulai kuis') + for i in range(student): + threads.append(Thread(target=siswa)) + threads[-1].start() + for thread in threads: + thread.join() + print('Batas Akhir pengerjaan kuis!') + +if _name_ == "_main_": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Kurnia Hayati/Condition.py b/QUIS SISTER 1/Kurnia Hayati/Condition.py new file mode 100644 index 0000000..06ab1e9 --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/Condition.py @@ -0,0 +1,70 @@ +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 Pasien(threading.Thread): + def _init_(self, *args, **kwargs): + super()._init_(*args, **kwargs) + + def daftar(self): + + with condition: + + if len(items) == 5: + logging.info('no antri') + condition.wait() + + items.pop() + logging.info('no antri {}'.format(len(items))) + + condition.notify() + + def run(self): + for i in range(5): + time.sleep(2) + self.antri() + + +class Dokter(threading.Thread): + def _init_(self, *args, **kwargs): + super()._init_(*args, **kwargs) + + def pendaftaran(self): + + with condition: + + if len(items) == 13: + logging.info('pendaftaran {}. Stopped'.format(len(items))) + condition.wait() + + items.append(1) + logging.info('waktu pendaftaran {}'.format(len(items))) + + condition.notify() + + def run(self): + for i in range(10): + time.sleep(0.7) + self.pendaftaran() + + +def main(): + antri = mahasiswa(name='mahasiswa') + pendaftaran = krs(name='krs') + + antri.start() + pendaftaran.start() + + antri.join() + pendaftaran.join() + + +if _name_ == "_main_": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Kurnia Hayati/Event.py b/QUIS SISTER 1/Kurnia Hayati/Event.py new file mode 100644 index 0000000..18c7b5b --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/Event.py @@ -0,0 +1,38 @@ +import threading +import time +import logging + +logging.basicConfig(level=logging.DEBUG, + format='(%(threadName)-9s) %(message)s',) + +def kendaraan(e): + logging.debug('sebentar') + event_is_set = e.wait() + logging.debug('roda berapa?: %s', event_is_set) + +def pergi(e, t): + while not e.isSet(): + logging.debug('warna apa kendaraannya?') + event_is_set = e.wait(t) + logging.debug('warna merah: %s', event_is_set) + if event_is_set: + logging.debug('terimakasih informasinya') + else: + logging.debug('mobilnya bagus juga?') + +if _name_ == "_main_": + e = threading.Event() + t1 = threading.Thread(name='wahyu', + target=kendaraan, + args=(e,)) + t1.start() + + t2 = threading.Thread(name='fay', + target=pergi, + args=(e, 2)) + t2.start() + + logging.debug('Waiting before calling Event.set()') + time.sleep(3) + e.set() + logging.debug('keren juga ya') \ No newline at end of file diff --git a/QUIS SISTER 1/Kurnia Hayati/MyThreadClass.py b/QUIS SISTER 1/Kurnia Hayati/MyThreadClass.py new file mode 100644 index 0000000..2e98e61 --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/MyThreadClass.py @@ -0,0 +1,49 @@ +import threading +import time +import os +from threading import Thread +from random import randint + +# Lock Definition +threadLock = threading.Lock() + +class Mysiswa (Thread): + def _init_(self, name, duration): + Thread._init_(self) + self.name = name + self.duration = duration + def run(self): + print ("---> " + self.name + \ + " siswa diberikan no absen "\ + + str(os.getpid()) + "\n") + time.sleep(self.duration) + print ("---> " + self.name + " over\n") + + +def main(): + start_time = time.time() + + # Thread Creation + thread1 = Mysiswa("no absen siswa ", randint(1,10)) + thread2 = Mysiswa("no absen siswa", randint(1,10)) + + + # Thread Running + thread1.start() + thread2.start() + + + # Thread joining + thread1.join() + thread2.join() + + + # End + print("selesai") + + #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/Kurnia Hayati/MyThreadClass_lock.py b/QUIS SISTER 1/Kurnia Hayati/MyThreadClass_lock.py new file mode 100644 index 0000000..b6a34dc --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/MyThreadClass_lock.py @@ -0,0 +1,73 @@ +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 + \ + " running, belonging to process ID "\ + + str(os.getpid()) + "\n") + time.sleep(self.duration) + print ("---> " + self.name + " over\n") + #Release the Lock + threadLock.release() + + +def main(): + start_time = time.time() + # Thread Creation + thread1 = MyThreadClass("Thread#1 ", randint(1,9)) + thread2 = MyThreadClass("Thread#2 ", randint(1,9)) + thread3 = MyThreadClass("Thread#3 ", randint(1,9)) + thread4 = MyThreadClass("Thread#4 ", randint(1,9)) + thread5 = MyThreadClass("Thread#5 ", randint(1,9)) + thread6 = MyThreadClass("Thread#6 ", randint(1,9)) + thread7 = MyThreadClass("Thread#7 ", randint(1,9)) + thread8 = MyThreadClass("Thread#8 ", randint(1,9)) + + # Thread Running + thread1.start() + thread2.start() + thread3.start() + thread4.start() + thread5.start() + thread6.start() + thread7.start() + thread8.start() + + + # Thread joining + thread1.join() + thread2.join() + thread3.join() + thread4.join() + thread5.join() + thread6.join() + thread7.join() + thread8.join() + + + # End + print("End") + + #Execution Time + print("--- %s seconds ---" % (time.time() - start_time)) + + +if __name__ == "__main__": + main() + + + + diff --git a/QUIS SISTER 1/Kurnia Hayati/MyThreadClass_lock_2.py b/QUIS SISTER 1/Kurnia Hayati/MyThreadClass_lock_2.py new file mode 100644 index 0000000..4ae67df --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/MyThreadClass_lock_2.py @@ -0,0 +1,54 @@ +import time +import os +from random import randint +from threading import Thread + +class MyThreadClass (Thread): + def _init_(self, name, duration): + Thread._init_(self) + self.name = name + self.duration = duration + def run(self): + print ("---> " + self.name + \ + " mulai kuis, NPM "\ + + str(os.getpid()) + "\n") + time.sleep(self.duration) + print ("---> " + self.name + " melakukan kuis\n") + + +def main(): + start_time = time.time() + + # Thread Creation + wahyu1 = MyThreadClass("wahyu ", randint(6,10)) + ayna2 = MyThreadClass("ayna ", randint(6,10)) + farhan3 = MyThreadClass("farhan ", randint(6,10)) + sinta4 = MyThreadClass("Jimin ", randint(6,10)) + via5 = MyThreadClass("sinta ", randint(6,10)) + ririn6 = MyThreadClass("ririn ", randint(6,10)) + + # Thread Running + wahyu1.start() + ayna2.start() + farhan3.start() + sinta4.start() + via5.start() + ririn6.start() + + # Thread joining + wahyu1.join() + ayna2.join() + farhan3.join() + sinta4.join() + via5.join() + ririn6.join() + + # End + print("End") + + #Execution Time + print("--- waktu pengerjaan kuis %s seconds ---" % (time.time() - start_time)) + + +if _name_ == "_main_": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Kurnia Hayati/Rlock.py b/QUIS SISTER 1/Kurnia Hayati/Rlock.py new file mode 100644 index 0000000..6831f5d --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/Rlock.py @@ -0,0 +1,25 @@ +# importing the module +import threading +from time import ctime + +# initializing the shared resource, isialisasi sumber daya +fanny = 0 + +# creating an RLock object instead, membuat objek RLock sebagsi pengganti lock objek +# of Lock object +lock = threading.RLock() + +# the below thread is trying to access, untuk mengakses +# the shared resource +lock.acquire() # metode mengunci data hingga terblokir +fanny = fanny + 4 + +# the below thread is trying to access +# the shared resource +lock.acquire() +fanny = fanny + 2 +lock.release() # melepaskan kunci +lock.release() + +# displaying the value of shared resource, menampilkan nilai sumber daya +print('No %s menyelesaikan ujian dengan waktu %s' % (fanny, ctime())) \ No newline at end of file diff --git a/QUIS SISTER 1/Kurnia Hayati/Semaphore.py b/QUIS SISTER 1/Kurnia Hayati/Semaphore.py new file mode 100644 index 0000000..3c295f3 --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/Semaphore.py @@ -0,0 +1,33 @@ +# importing the modules +from threading import * +import time + +# creating thread instance where count = 3 +obj = Semaphore(3) + +# creating instance +def display(name): + + # calling acquire method, memanggil metode pemanggil data + obj.acquire() + for i in range(5): + print('Fanny, ', end = '') + time.sleep(1) + print(name) + + # calling release method, memanggil metode rilis + obj.release() + +# creating multiple thread/utas +t1 = Thread(target = display , args = ('Thread-1',)) +t2 = Thread(target = display , args = ('Thread-2',)) +t3 = Thread(target = display , args = ('Thread-3',)) +t4 = Thread(target = display , args = ('Thread-4',)) +t5 = Thread(target = display , args = ('Thread-5',)) + +# calling the threads +t1.start() +t2.start() +t3.start() +t4.start() +t5.start() diff --git a/QUIS SISTER 1/Kurnia Hayati/Thread_definition.py b/QUIS SISTER 1/Kurnia Hayati/Thread_definition.py new file mode 100644 index 0000000..97e2e28 --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/Thread_definition.py @@ -0,0 +1,17 @@ +import threading + + +def my_func(thread_number): + return print('Mahasiswa TEKNIK {}'.format(thread_number)) + + +def main(): + threads = [] + for i in range(5): + t = threading.Thread(target=my_func, args=(i,)) + threads.append(t) + t.start() + t.join() + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Kurnia Hayati/Thread_determine.py b/QUIS SISTER 1/Kurnia Hayati/Thread_determine.py new file mode 100644 index 0000000..bf45ba5 --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/Thread_determine.py @@ -0,0 +1,30 @@ +import threading +import time + +def daftar (): + print (threading.currentThread().getName()+str('--> memulai daftar \n')) + + print (threading.currentThread().getName()+str( '--> daftar selesai \n')) + time.sleep(2) + return + +def absen(): + print (threading.currentThread().getName()+str('--> mulai absen \n')) + time.sleep(3) + print (threading.currentThread().getName()+str( '--> selesai absen \n')) + time.sleep(2) + return + + +if __name__ == "__main__": + + t1 = threading.Thread(name='daftar', target=daftar) + t2 = threading.Thread(name='absen', target=absen) + + + t1.start() + t2.start() + + t1.join() + t2.join() + diff --git a/QUIS SISTER 1/Kurnia Hayati/Thread_name_and_processes.py b/QUIS SISTER 1/Kurnia Hayati/Thread_name_and_processes.py new file mode 100644 index 0000000..48f15a9 --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/Thread_name_and_processes.py @@ -0,0 +1,33 @@ +from threading import Thread +import time +import os + +class MyThreadClass (Thread): + def _init_(self, name): + Thread._init_(self) + self.name = name + + def run(self): + print("jangan menyerah menggapai mimpi {}".format(self.name)) #, " is {} \n".format(os.getpid())) + +def main(): + from random import randint + # Thread Creation + thread1 = MyThreadClass("Thread#1 ") + thread2 = MyThreadClass("Thread#2 ") + + # Thread Running + thread1.start() + thread2.start() + + + # Thread joining + thread1.join() + thread2.join() + + # End + print("tetap semangat!!") + + +if _name_ == "_main_": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Kurnia Hayati/Threading_with_queue.py b/QUIS SISTER 1/Kurnia Hayati/Threading_with_queue.py new file mode 100644 index 0000000..84e9f38 --- /dev/null +++ b/QUIS SISTER 1/Kurnia Hayati/Threading_with_queue.py @@ -0,0 +1,55 @@ +def queue(): + s = [] + return s +def enqueue(s,i): + s.insert(0,i) + return s +def dequeue(s): + return s.pop() +def rear(s): + return (s[0]) +def front(s): + return (s[len(s)-1]) +def size(s): + return len(s) +def isEmpty(s): + return s==[] + +def No2(): + s = queue() + k='' + while True: + banyak = int(input('Masukan banyak siswa dikelas = ')) + for j in range(banyak): + siswa = input('Masukan nama siswa ke %i yang masuk di pendaftaran = '%(j+1)) + enqueue(s,siswa) + s.reverse() + print('siswa yang berada di pendaftaran %s'%s) + s.reverse() + o = input('Masukan nama orsiswa ang yang ingin ditemukan = ') + ditemukan = 't' + itung = 0 + while ditemukan=='t': + if o == front(s): + print('selamat! data siswa ditemukan') + ditemukan = 'y' + elif o != front(s): + masukan = dequeue(s) + enqueue(s,masukan) + ditemukan = 't' + s.reverse() + print('Looping %i = %s'%((itung+1),s)) + s.reverse() + itung+=1 + if itung > len(s): + print('Maaf! data siswa yang dimaksud tidak ada') + ditemukan = 'y' + print('Total looping yang perlukan ',str(itung-1)) + k = input('ingin melanjutkan pendataan (y/n) ? ') + if k != 'y': + break + else: + print('OKE LANJUT') + +No2() + \ No newline at end of file