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
26 changes: 26 additions & 0 deletions Chapter03/praktikum/studikasus_communicating_with_pipe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import multiprocessing

def konduktor(conn, events):
for event in events:
conn.send(event)
print(f"Dirijen mengirim tanda: {event}")

def pemain_alat_musik(conn):
while True:
event = conn.recv()
if event == "eod":
print("Pemain alat musik menerima: permainan alat musik berhenti")
return
print(f"Pemain alat musik menerima: {event}")



if __name__ == "__main__":
events = ["Violin mulai bermain", "Cello mulai bermain", "Double bass mulai bermain", "Harpa mulai bermain", "end"]
conn1, conn2 = multiprocessing.Pipe()
process_1 = multiprocessing.Process(target=konduktor, args=(conn1, events))
process_2 = multiprocessing.Process(target=pemain_alat_musik, args=(conn2,))
process_1.start()
process_2.start()
process_1.join()
process_2.join()
47 changes: 47 additions & 0 deletions Chapter03/praktikum/studikasus_communicating_with_queue.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import multiprocessing
import random
import time


class pemilik(multiprocessing.Process):
def __init__(self, queue):
multiprocessing.Process.__init__(self)
self.queue = queue

def run(self) :
for i in range(4):
kostrakan = random.randrange(0, 20)
self.queue.put(kostrakan)
print ("Proses Pemilik : Pemilik dengan ID %d Menambahkan Bangunan ke dalam list kos dan kontrakan"\
% (kostrakan))
time.sleep(1)
print ("Jumlah kos dan kontrakan adalah %s"\
% self.queue.qsize())

class pencari(multiprocessing.Process):
def __init__(self, queue):
multiprocessing.Process.__init__(self)
self.queue = queue

def run(self):
while True:
if (self.queue.empty()):
print("Tidak Ada Bangunan yang tersedia saat ini :(")
break
else :
time.sleep(2)
item = self.queue.get()
print ('Proses Pencari : Bangunan %d Tersedia \
dimiliki oleh %s \n'\
% (item, self.name))
time.sleep(1)


if __name__ == '__main__':
queue = multiprocessing.Queue()
process_Pemilik = pemilik(queue)
process_pencari = pencari(queue)
process_Pemilik.start()
process_pencari.start()
process_Pemilik.join()
process_pencari.join()
20 changes: 20 additions & 0 deletions Chapter03/praktikum/studikasus_killing_processes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import multiprocessing
import time

def pungsi():
print ('Start')
time.sleep(0.1)
print ('Finish')

if __name__ == '__main__':
p = multiprocessing.Process(target=pungsi)
print ('BEFORE:', p, p.is_alive())

p.start()
print ('DURING:', p, p.is_alive())

p.terminate()
print ('TERMINATED:', p, p.is_alive())

p.join()
print ('JOINED:', p, p.is_alive())
38 changes: 38 additions & 0 deletions Chapter03/praktikum/studikasus_naming_processes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import multiprocessing
import time
from time import ctime

def myFunc():
name = multiprocessing.current_process().name
print ("Starting process name = %s \n pada tanggal %s\n" % (name, ctime()))
time.sleep(3)
print ("Exiting process name = %s \n pada tanggal %s\n" % (name, ctime()))

if __name__ == '__main__':
process_with_name1 = multiprocessing.Process\
(name='Penamaan produk',\
target=myFunc)
process_with_name2 = multiprocessing.Process\
(name='Penomoran produk',\
target=myFunc)

#process_with_name.daemon = True

process_with_default_name1 = multiprocessing.Process\
(target=myFunc)
process_with_default_name2 = multiprocessing.Process\
(target=myFunc)

process_with_name1.start()
process_with_name2.start()
process_with_default_name1.start()
process_with_default_name2.start()

process_with_name1.join()
process_with_name2.join()
process_with_default_name1.join()
process_with_default_name2.join()

print('Selesai proses')


15 changes: 15 additions & 0 deletions Chapter03/praktikum/studikasus_process_in_subclass.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import multiprocessing
from time import ctime

class MyProcess(multiprocessing.Process):

def run(self):
print ('%s produk selesai di inputkan pada tanggal %s' %(self.name, ctime()))
return

if __name__ == '__main__':
for i in range(10):
process = MyProcess()
process.start()
process.join()

36 changes: 36 additions & 0 deletions Chapter03/praktikum/studikasus_process_pool.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#Using a Process Pool – Chapter 3: Process Based Parallelism
import multiprocessing
from time import ctime, sleep
from random import random

def function_square(data):
result = data*data
return result

produk1 = 'Ram'
produk2 = 'Matherboard'
produk3 = 'Komputer'
if __name__ == '__main__':
inputs1 = list(range(9,10))
inputs2 = list(range(19,20))
inputs3 = list(range(29,30))

pool = multiprocessing.Pool(processes=4)
pool_outputs1 = pool.map(function_square, inputs1)
pool_outputs2 = pool.map(function_square, inputs2)
pool_outputs3 = pool.map(function_square, inputs3)

mhs1 = produk1
mhs2 = produk2
mhs3 = produk3

value = random() * 10
sleep(value)

print (f'Pembagian Nomor Produk: \n Nama Produk: %s \n Nomor Produk: %s \n Waktu render: {value} \n Tanggal: %s \n' % (mhs1, pool_outputs1, ctime()))
print (f'Pembagian Nomor Produk: \n Nama Produk: %s \n Nomor Produk: %s \n Waktu render: {value} \n Tanggal: %s \n' % (mhs2, pool_outputs2, ctime()))
print (f'Pembagian Nomor Produk: \n Nama Produk: %s \n Nomor Produk: %s \n Waktu render: {value} \n Tanggal: %s \n' % (mhs3, pool_outputs3, ctime()))

pool.close()
pool.join()
print('Selesai')
36 changes: 36 additions & 0 deletions Chapter03/praktikum/studikasus_processes_barrier.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import multiprocessing
from multiprocessing import Barrier, Lock, Process
from time import time
from datetime import datetime


def test_with_barrier(synchronizer, serializer):
name = multiprocessing.current_process().name
synchronizer.wait()
now = time()
with serializer:
print("Produk %s ----> %s" \
%(name,datetime.fromtimestamp(now)))

def test_without_barrier():
name = multiprocessing.current_process().name
now = time()
print("Produk %s ----> %s" \
%(name ,datetime.fromtimestamp(now)))

if __name__ == '__main__':
synchronizer = Barrier(2)
serializer = Lock()
Process(name='Meja - Berhasil terjual'\
,target=test_with_barrier,\
args=(synchronizer,serializer)).start()
Process(name='Kursi - Berhasil terjual'\
,target=test_with_barrier,\
args=(synchronizer,serializer)).start()
Process(name='Laptop - Berhasil terjual'\
,target=test_without_barrier).start()
Process(name='Ram - Berhasil terjual'\
,target=test_without_barrier).start()



34 changes: 34 additions & 0 deletions Chapter03/praktikum/studikasus_run_background_processes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import multiprocessing
import time
from time import ctime

def foo():
name = multiprocessing.current_process().name
print ("Produk %s pada tanggal %s \n" %(name, ctime()))
if name == 'retur':
for i in range(0,5):
print('SKU produk %d \n' %i)
time.sleep(1)
else:
for i in range(5,10):
print('SKU produk %d \n' %i)
time.sleep(1)
print ("Exiting %s \n" %name)


if __name__ == '__main__':
background_process = multiprocessing.Process\
(name='retur berhasil',\
target=foo)
background_process.daemon = True

NO_background_process = multiprocessing.Process\
(name='retur berhasil',\
target=foo)

NO_background_process.daemon = False

background_process.start()
NO_background_process.start()


Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import multiprocessing
import time
from time import ctime

def foo():
name = multiprocessing.current_process().name
print ("Produk %s pada tanggal %s \n" %(name, ctime()))
if name == 'retur':
for i in range(10,15):
print('SKU produk %d \n' %i)
time.sleep(1)
else:
for i in range(15,20):
print('SKU produk %d \n' %i)
time.sleep(1)
print ("Exiting %s \n" %name)


if __name__ == '__main__':
background_process = multiprocessing.Process\
(name='retur berhasil',\
target=foo)
background_process.daemon = False

NO_background_process = multiprocessing.Process\
(name='retur behasil',\
target=foo)

NO_background_process.daemon = False

background_process.start()
NO_background_process.start()


22 changes: 22 additions & 0 deletions QUIS SISTER 1/1194018_HelmiSalsabila/StudiKasusBarrier.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# example of using a barrier
from time import ctime, sleep
from random import random
from threading import Thread, Barrier

name = ['Farhan', 'Kevin', 'Putri', 'Helmi', 'Salsabila']
def main(barrier, number):
value = random() * 10
mhs = name.pop()
sleep(value)
print(f'No urut {number} %s sudah sampai di kampus, pada hari %s dengan waktu: {value} \n' % (mhs, ctime()))
# menunggu semuanya slesai
barrier.wait()

# buat barrier
case = Barrier(5 + 1)
for i in range(5):
gasin = Thread(target=main, args=(case, i))
gasin.start()
print('Mulai..')
case.wait()
print('Selesai')
70 changes: 70 additions & 0 deletions QUIS SISTER 1/1194018_HelmiSalsabila/StudiKasusCondition.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 Mahasiswa(threading.Thread):
def _init_(self, *args, **kwargs):
super()._init_(*args, **kwargs)

def urut(self):

with condition:

if len(items) == 5:
logging.info('Absensi ke')
condition.wait()

items.pop()
logging.info('Absensi ke {}'.format(len(items)))

condition.notify()

def run(self):
for i in range(7):
time.sleep(2)
self.urut()


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

def Jumlah(self):

with condition:

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

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

condition.notify()

def run(self):
for i in range(20):
time.sleep(0.5)
self.Jumlah()


def main():
urut = Mahasiswa(name='Mahasiswa')
Quiz = Dosen(name='Dosen')

urut.start()
Quiz.start()

urut.join()
Quiz.join()


if __name__ == "__main__":
main()
Loading