Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions QUIS SISTER 1/Chapter02-Audry/Barrier.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from random import randrange
from threading import Barrier, Thread
from time import ctime, sleep

lomba = 4
finish_line = Barrier(lomba)
nama_peserta = ['Audry', 'Bella', 'Vino', 'Lala']

def peserta():
name = nama_peserta.pop()
sleep(randrange(2, 4))
print(' %s mulai lomba melukis pada: %s \n' % (name, ctime()))
finish_line.wait()
print(' %s selesai melukis pada: %s \n' % (name, ctime()))

def main():
threads = []
print('Mulai Lomba Melukis')
for i in range(lomba):
threads.append(Thread(target=peserta))
threads[-1].start()
for thread in threads:
thread.join()
print('Selesai!')


if __name__ == "__main__":
main()
70 changes: 70 additions & 0 deletions QUIS SISTER 1/Chapter02-Audry/Condition.py
Original file line number Diff line number Diff line change
@@ -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 Shopee(threading.Thread):
def _init_(self, *args, **kwargs):
super()._init_(*args, **kwargs)

def membeli(self):

with condition:

if len(items) == 0:
logging.info('no items to checkout')
condition.wait()

items.pop()
logging.info('chekout 1 item')

condition.notify()

def run(self):
for i in range(5):
time.sleep(1)
self.membeli()


class Lazada(threading.Thread):
def _init_(self, *args, **kwargs):
super()._init_(*args, **kwargs)

def menjual(self):

with condition:

if len(items) == 5:
logging.info('checkout {} items. Stopped'.format(len(items)))
condition.wait()

items.append(1)
logging.info('chekout {} items '.format(len(items)))

condition.notify()

def run(self):
for i in range(5):
time.sleep(1)
self.menjual()


def main():
shopee = Shopee(name='shopee')
lazada = Lazada(name='lazada')

shopee.start()
lazada.start()

shopee.join()
lazada.join()


if __name__ == "__main__":
main()
47 changes: 47 additions & 0 deletions QUIS SISTER 1/Chapter02-Audry/Event.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
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 Tokped(threading.Thread):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def run(self):
while True:
time.sleep(1)
event.wait()
item = items.pop()
logging.info('Tokped notify: {} dikelola oleh {}'\
.format(item, self.name))

class Blibli(threading.Thread):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def run(self):
for i in range(3):
time.sleep(1)
item = random.randint(0, 10)
items.append(item)
logging.info('Blibli notify: item {} dikelola {}'\
.format(item, self.name))
event.set()
event.clear()

if __name__ == "__main__":
t1 = Tokped()
t2 = Blibli()

t1.start()
t2.start()

t1.join()
t2.join()
58 changes: 58 additions & 0 deletions QUIS SISTER 1/Chapter02-Audry/MyThreadClass.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
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 ujian , Nomor Ujian "\
+ str(os.getpid()) + "\n")
time.sleep(self.duration)
print ("---> " + self.name + " Selesai\n")


def main():
start_time = time.time()

# Thread Creation
Audry1 = MyThreadClass("Audry ", randint(1,5))
Artha2 = MyThreadClass("Artha ", randint(1,5))
Lina3 = MyThreadClass("Lina ", randint(1,5))
Jimin4 = MyThreadClass("Jimin ", randint(1,5))
Wooyoung5 = MyThreadClass("Wooyoung ", randint(1,5))
Haruto6 = MyThreadClass("Haruto ", randint(1,5))

# Thread Running
Audry1.start()
Artha2.start()
Lina3.start()
Jimin4.start()
Wooyoung5.start()
Haruto6.start()

# Thread joining
Audry1.join()
Artha2.join()
Lina3.join()
Jimin4.join()
Wooyoung5.join()
Haruto6.join()

# End
print("Ujian Selesai")

#Execution Time
print("--- %s detik ---" % (time.time() - start_time))


if __name__ == "__main__":
main()




65 changes: 65 additions & 0 deletions QUIS SISTER 1/Chapter02-Audry/MyThreadClass_lock.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
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 + \
" mulai presentasi, NPM: "\
+ str(os.getpid()) + "\n")
time.sleep(self.duration)
print ("---> " + self.name + " selesai \n")
#Release the Lock
threadLock.release()


def main():
start_time = time.time()
# Thread Creation
Audry1 = MyThreadClass("Audry ", randint(1,5))
Artha2 = MyThreadClass("Artha ", randint(1,5))
Lina3 = MyThreadClass("Lina ", randint(1,5))
Jimin4 = MyThreadClass("Jimin ", randint(1,5))
Wooyoung5 = MyThreadClass("Wooyoung ", randint(1,5))
Haruto6 = MyThreadClass("Haruto ", randint(1,5))

# Thread Running
Audry1.start()
Artha2.start()
Lina3.start()
Jimin4.start()
Wooyoung5.start()
Haruto6.start()

# Thread joining
Audry1.join()
Artha2.join()
Lina3.join()
Jimin4.join()
Wooyoung5.join()
Haruto6.join()

# End
print("The End")

#Execution Time
print("--- %s seconds ---" % (time.time() - start_time))


if __name__ == "__main__":
main()




68 changes: 68 additions & 0 deletions QUIS SISTER 1/Chapter02-Audry/MyThreadClass_lock_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
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 games, ID games "\
+ str(os.getpid()) + "\n")
threadLock.release()
time.sleep(self.duration)
print ("---> " + self.name + " over\n")
#Release the Lock


def main():
start_time = time.time()

# Thread Creation
Audry1 = MyThreadClass("Audry ", randint(1,5))
Artha2 = MyThreadClass("Artha ", randint(1,5))
Lina3 = MyThreadClass("Lina ", randint(1,5))
Jimin4 = MyThreadClass("Jimin ", randint(1,5))
Wooyoung5 = MyThreadClass("Wooyoung ", randint(1,5))
Haruto6 = MyThreadClass("Haruto ", randint(1,5))


# Thread Running
Audry1.start()
Artha2.start()
Lina3.start()
Jimin4.start()
Wooyoung5.start()
Haruto6.start()


# Thread joining
Audry1.join()
Artha2.join()
Lina3.join()
Jimin4.join()
Wooyoung5.join()
Haruto6.join()

# End
print("End")

#Execution Time
print("--- %s detik ---" % (time.time() - start_time))


if __name__ == "__main__":
main()




Loading