diff --git a/QUIS SISTER 1/Anisa Rosalina/Barrier.py b/QUIS SISTER 1/Anisa Rosalina/Barrier.py new file mode 100644 index 0000000..47caa69 --- /dev/null +++ b/QUIS SISTER 1/Anisa Rosalina/Barrier.py @@ -0,0 +1,26 @@ +from random import randrange +from threading import Barrier, Thread +from time import ctime, sleep + +num_runners = 3 +finish_line = Barrier(num_runners) +runners = ['Razqya', 'Dimana', 'Alamatmu'] + +def runner(): + name = runners.pop() + sleep(randrange(2, 5)) + print('%s reached the barrier at: %s \n' % (name, ctime())) + finish_line.wait() + +def main(): + threads = [] + print('Ayo kita pergi belanja!!!!') + for i in range(num_runners): + threads.append(Thread(target=runner)) + threads[-1].start() + for thread in threads: + thread.join() + print('Lest Go!') + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Anisa Rosalina/Condition.py b/QUIS SISTER 1/Anisa Rosalina/Condition.py new file mode 100644 index 0000000..1b775a4 --- /dev/null +++ b/QUIS SISTER 1/Anisa Rosalina/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 Consumer(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def consume(self): + + with condition: + + if len(items) == 0: + logging.info('no items to chocolate') + condition.wait() + + items.pop() + logging.info('chocolate 1 item') + + condition.notify() + + def run(self): + for i in range(20): + time.sleep(2) + self.consume() + + +class Producer(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def produce(self): + + with condition: + + if len(items) == 10: + logging.info('items chocolate {}. Stopped'.format(len(items))) + condition.wait() + + items.append(1) + logging.info('total items {}'.format(len(items))) + + condition.notify() + + def run(self): + for i in range(20): + time.sleep(0.5) + self.produce() + + +def main(): + producer = Producer(name='Pabrik chocolate') + consumer = Consumer(name='chocolate') + + producer.start() + consumer.start() + + producer.join() + consumer.join() + + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Anisa Rosalina/MyThreadClass.py b/QUIS SISTER 1/Anisa Rosalina/MyThreadClass.py new file mode 100644 index 0000000..2e5d6dc --- /dev/null +++ b/QUIS SISTER 1/Anisa Rosalina/MyThreadClass.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 17:38:34 2022 + +@author: Acer +""" + +import time +import os +from random import randint +from threading import Thread + +class Giveaway (Thread): + def __init__(self, name, duration): + Thread.__init__(self) + self.name = name + self.duration = duration + def run(self): + print ("---> Pemenangnya adalah " + self.name + "\n") + time.sleep(self.duration) + print ("---> Selamat Kepada " + self.name) + + +def main(): + start_time = time.time() + + # Thread Creation + thread1 = Giveaway("Rezkia ", randint(1,10)) + thread2 = Giveaway("Caca", randint(1,10)) + + + # Thread Running + thread1.start() + thread2.start() + + + # Thread joining + thread1.join() + thread2.join() + + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Anisa Rosalina/MyThreadClass_lock.py b/QUIS SISTER 1/Anisa Rosalina/MyThreadClass_lock.py new file mode 100644 index 0000000..77bec66 --- /dev/null +++ b/QUIS SISTER 1/Anisa Rosalina/MyThreadClass_lock.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 17:37:46 2022 + +@author: Acer +""" + +import threading +import time +import os +from threading import Thread +from random import randint + +# Lock Definition +threadLock = threading.Lock() + +class Giveaway (Thread): + def __init__(self, name, duration): + Thread.__init__(self) + self.name = name + self.duration = duration + def run(self): + #Acquire the Lock + threadLock.acquire() + print ("---> Pemenangnya adalah " + self.name + "\n") + threadLock.release() + time.sleep(self.duration) + print ("---> Selamat Kepada " + self.name) + #Release the Lock + + +def main(): + start_time = time.time() + + # Thread Creation + thread1 = Giveaway("Rezkia ", randint(1,10)) + thread2 = Giveaway("Caca", randint(1,10)) + + + + # Thread Running + thread1.start() + thread2.start() + + + + # Thread joining + thread1.join() + thread2.join() + + + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Anisa Rosalina/MyThreadClass_lock_2.py b/QUIS SISTER 1/Anisa Rosalina/MyThreadClass_lock_2.py new file mode 100644 index 0000000..878e97a --- /dev/null +++ b/QUIS SISTER 1/Anisa Rosalina/MyThreadClass_lock_2.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 17:39:08 2022 + +@author: Acer +""" + +import threading +import time +import os +from threading import Thread +from random import randint + +# Lock Definition +threadLock = threading.Lock() + +class Mahasiswa (Thread): + def __init__(self, name, duration): + Thread.__init__(self) + self.name = name + self.duration = duration + def run(self): + threadLock.acquire() + print ("---> Pemenangnya adalah " + self.name + "\n") + threadLock.release() + time.sleep(self.duration) + print ("---> Selamat Kepada " + self.name) + + +def main(): + start_time = time.time() + + # Thread Creation + thread1 = Mahasiswa("Rezkia", randint(1,10)) + thread2 = Mahasiswa("caca", randint(1,10)) + + + # Thread Running + thread1.start() + thread2.start() + + + # Thread joining + thread1.join() + thread2.join() + + + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Anisa Rosalina/Rlock.py b/QUIS SISTER 1/Anisa Rosalina/Rlock.py new file mode 100644 index 0000000..d9a75d7 --- /dev/null +++ b/QUIS SISTER 1/Anisa Rosalina/Rlock.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 16:46:39 2022 + +@author: Acer +""" + +import threading +import time +import random + + +class BoxChocolate: + 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 adder(boxchocolate, items): + print("Banyaknya chocolate {} yang ditambahkan \n".format(items)) + while items: + boxchocolate.add() + time.sleep(1) + items -= 1 + print("stok buah chocolate saat ini -->{} buah \n".format(items)) + + + +def remover(boxchocolate, items): + print("banyaknya chocolate {} yang di jual \n".format(items)) + while items: + boxchocolate.remove() + time.sleep(1) + items -= 1 + print("chocolate yang dijual -->{} buah \n".format(items)) + + +def main(): + items = 12 + box = BoxChocolate() + + t1 = threading.Thread(target=adder, \ + args=(box, random.randint(1,10))) + t2 = threading.Thread(target=remover, \ + args=(box, random.randint(1,10))) + + t1.start() + t2.start() + + + t1.join() + t2.join() + + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Anisa Rosalina/Semaphore.py b/QUIS SISTER 1/Anisa Rosalina/Semaphore.py new file mode 100644 index 0000000..f7954bd --- /dev/null +++ b/QUIS SISTER 1/Anisa Rosalina/Semaphore.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 16:43:39 2022 + +@author: Acer +""" + +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 pemenangundian(): + logging.info('giveaway dari myrubylicious akan segera dimulai, pemenang akan diumumkan 3 hari lagi') + semaphore.acquire() + logging.info('pemenang undian giveaway dengan nomor {} harap dapat ke store offline myrubylicious di jalan setiabudhi'.format(item)) + + +def nomorundian(): + global item + time.sleep(3) + item = random.randint(1, 10) + logging.info('nomor {} adalah pemenang undian giveaway'.format(item)) + semaphore.release() + + +def main(): + for i in range(1): + t1 = threading.Thread(target=pemenangundian) + t2 = threading.Thread(target=nomorundian) + + t1.start() + t2.start() + + t1.join() + t2.join() + + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Anisa Rosalina/Thread_definition.py b/QUIS SISTER 1/Anisa Rosalina/Thread_definition.py new file mode 100644 index 0000000..8ae7e78 --- /dev/null +++ b/QUIS SISTER 1/Anisa Rosalina/Thread_definition.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 16:20:41 2022 + +@author: Acer +""" + +import threading + + +def Chocolate(thread_number): + return print('Jumlah Chocolate yang tersedia ditoko{} pcs'.format(thread_number)) + + +def main(): + threads = [] + for i in range(10): + t = threading.Thread(target=Chocolate, args=(i,)) + threads.append(t) + t.start() + t.join() + + +if __name__ == "__main__": + main() diff --git a/QUIS SISTER 1/Anisa Rosalina/Thread_name_and_processes.py b/QUIS SISTER 1/Anisa Rosalina/Thread_name_and_processes.py new file mode 100644 index 0000000..2634458 --- /dev/null +++ b/QUIS SISTER 1/Anisa Rosalina/Thread_name_and_processes.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 16:31:30 2022 + +@author: Acer +""" + +from threading import Thread +import time +import os + +class MakananClass (Thread): + def __init__(self, name): + Thread.__init__(self) + self.name = name + + def run(self): + print("Makanan Khas Jawa Barat {}".format(self.name)) #, " is {} \n".format(os.getpid())) + +def main(): + from random import randint + # Thread Creation + thread1 = MakananClass("Karedok") + thread2 = MakananClass("Tutug Oncom") + thread3 = MakananClass("Ubi Cilembo") + thread4 = MakananClass("Nasi Jamblang") + + # Thread Running + thread4.start() + thread2.start() + thread3.start() + thread1.start() + + + # Thread joining + thread1.join() + thread2.join() + thread3.join() + thread4.join() + + # End + print("End") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/QUIS SISTER 1/Anisa Rosalina/event.py b/QUIS SISTER 1/Anisa Rosalina/event.py new file mode 100644 index 0000000..fbc4997 --- /dev/null +++ b/QUIS SISTER 1/Anisa Rosalina/event.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Apr 20 14:28:19 2022 + +@author: Acer +""" + +import threading +import time +import logging + +logging.basicConfig(level=logging.DEBUG, + format='(%(threadName)-9s) %(message)s',) + +def jalan(e): + logging.debug('sepertinya kita harus pergi') + event_is_set = e.wait() + logging.debug('kamu ada dimana?: %s', event_is_set) + +def pergi(e, t): + while not e.isSet(): + logging.debug('ayo kita pergi, kemana yaa?') + event_is_set = e.wait(t) + logging.debug('kita pergi ke jakarta aja : %s', event_is_set) + if event_is_set: + logging.debug('ayok') + else: + logging.debug('mobilnya bagus juga ya') + +if __name__ == "__main__": + e = threading.Event() + t1 = threading.Thread(name='Caca', + target=jalan, + args=(e,)) + t1.start() + + t2 = threading.Thread(name='Cici', + target=pergi, + args=(e, 2)) + t2.start() + + logging.debug('Waiting before calling Event.set()') + time.sleep(3) + e.set() + logging.debug('melelahkan juga ya') \ No newline at end of file