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
22 changes: 22 additions & 0 deletions QUIS SISTER 1/Muhammad Nazhim Maulana/Barrier.py
Original file line number Diff line number Diff line change
@@ -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()
67 changes: 67 additions & 0 deletions QUIS SISTER 1/Muhammad Nazhim Maulana/Condition.py
Original file line number Diff line number Diff line change
@@ -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()
48 changes: 48 additions & 0 deletions QUIS SISTER 1/Muhammad Nazhim Maulana/Event.py
Original file line number Diff line number Diff line change
@@ -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()
67 changes: 67 additions & 0 deletions QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass.py
Original file line number Diff line number Diff line change
@@ -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()
78 changes: 78 additions & 0 deletions QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass_lock.py
Original file line number Diff line number Diff line change
@@ -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()




78 changes: 78 additions & 0 deletions QUIS SISTER 1/Muhammad Nazhim Maulana/MyThreadClass_lock_2.py
Original file line number Diff line number Diff line change
@@ -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()




Loading