diff --git a/Chapter01/__pycache__/do_something.cpython-310.pyc b/Chapter01/__pycache__/do_something.cpython-310.pyc index 4f77252..fb67fcd 100644 Binary files a/Chapter01/__pycache__/do_something.cpython-310.pyc and b/Chapter01/__pycache__/do_something.cpython-310.pyc differ diff --git a/Chapter01/classes.py b/Chapter01/classes.py index 9b46a2c..f420e2d 100644 --- a/Chapter01/classes.py +++ b/Chapter01/classes.py @@ -1,12 +1,12 @@ class namakelas: common = 10 - def __init__ (self): + def __init__ (self): #memanggil constructor self.myvariable = 3 - def myfunction (self, arg1, arg2): + def myfunction (self, arg1, arg2): #instance method return self.myvariable instance = namakelas() -print("instance.myfunction(1, 2)" , instance.myfunction(1, 2)) +print("instance.myfunction(1, 2)" , instance.myfunction(1, 2)) #memanggil instance method instance2 = namakelas() print("instance.common ",instance.common) @@ -36,10 +36,10 @@ def __init__ (self, arg1): print (arg1) instance = AnotherClass ("hello") -print("instance.myfunction (1, 2) " , instance.myfunction (1, 2)) +print("instance.myfunction (1, 2) " , instance.myfunction (1, 2)) #memanggil instance method instance.test = 10 -print("instance.test " , instance.test) +print("instance.test " , instance.test) #memanggil instance method diff --git a/Chapter01/dir.py b/Chapter01/dir.py index 65da81d..1721572 100644 --- a/Chapter01/dir.py +++ b/Chapter01/dir.py @@ -2,7 +2,7 @@ # kami memeriksa apakah angkanya positif atau negatif atau nol dan # tampilkan pesan yang sesuai -num = 1 +num = 0 # Try these two variations as well: # num = 0 @@ -23,7 +23,8 @@ numbers = [6, 6, 3, 8, -3, 2, 5, 44, 12] # variable to store the sum -sum = 0 +sum = -35 +# sum = 0 # iterate over the list for val in numbers: @@ -32,3 +33,9 @@ # Output: The sum is 48 print("The sum is", sum) +if sum > 0: + print("Positive number") +elif sum == 0: + print("Zero") +else: + print("Negative number") \ No newline at end of file diff --git a/Chapter01/file.py b/Chapter01/file.py index 15d4e26..2e17f8d 100644 --- a/Chapter01/file.py +++ b/Chapter01/file.py @@ -1,11 +1,13 @@ -f = open ('test.txt', 'w') -f.write ('first line of file \n') +f = open ('test.txt', 'w') #menulis dalam format text. +f.write ('first line of file \n') #menulis string didalam file yang telah dibuka -f.write ('second line of file \n') +f.write ('second line of file \n') #menulis string didalam file yang telah dibuka + +f.close() #menutup file +f = open ('test.txt') #membuka file pada direktori saat ini untuk dibaca +content = f.read() #membaca string dari file +print (content) #menampilkan konten yang ada didalam file + +f.close() #menutup file -f.close() -f = open ('test.txt') -content = f.read() -print (content) -f.close() diff --git a/Chapter01/multiprocessing_test.py b/Chapter01/multiprocessing_test.py index 2480586..3cdc7f1 100644 --- a/Chapter01/multiprocessing_test.py +++ b/Chapter01/multiprocessing_test.py @@ -3,23 +3,23 @@ import multiprocessing -if __name__ == "__main__": +if __name__ == "__main__": # Memastikan code ada pada main function/tidak diimport. start_time = time.time() size = 10000000 procs = 10 jobs = [] - for i in range(0, procs): + for i in range(0, procs): #Membuat proses out_list = list() process = multiprocessing.Process\ - (target=do_something,args=(size,out_list)) + (target=do_something,args=(size,out_list)) # Menginisiasi proses dengan argument jobs.append(process) for j in jobs: - j.start() + j.start() # memulai proses - for j in jobs: + for j in jobs: # menyelesaikan proses j.join() - print ("List processing complete.") + print ("List processing complete.") # proses selesai end_time = time.time() print("multiprocesses time=", end_time - start_time) diff --git a/Chapter01/multithreading_test.py b/Chapter01/multithreading_test.py index 055abdd..d0ddc41 100644 --- a/Chapter01/multithreading_test.py +++ b/Chapter01/multithreading_test.py @@ -2,23 +2,23 @@ import time import threading -if __name__ == "__main__": +if __name__ == "__main__": # Memastikan code ada pada main function/tidak diimport. start_time = time.time() size = 10000000 threads = 10 jobs = [] for i in range(0, threads): out_list = list() - thread = threading.Thread(target=do_something(size, out_list)) + thread = threading.Thread(target=do_something(size, out_list)) # Membuat Thread jobs.append(thread) for j in jobs: - j.start() + j.start() # memulai proses for j in jobs: - j.join() + j.join() # menyelesaikan proses - print ("List processing complete.") + print ("List processing complete.") #proses selesai end_time = time.time() print("multithreading time=", end_time - start_time) diff --git a/Chapter01/studiKasus/__pycache__/do_studikasus.cpython-310.pyc b/Chapter01/studiKasus/__pycache__/do_studikasus.cpython-310.pyc new file mode 100644 index 0000000..fee56d7 Binary files /dev/null and b/Chapter01/studiKasus/__pycache__/do_studikasus.cpython-310.pyc differ diff --git a/Chapter01/studiKasus/__pycache__/do_studikasus.cpython-39.pyc b/Chapter01/studiKasus/__pycache__/do_studikasus.cpython-39.pyc new file mode 100644 index 0000000..fd7f561 Binary files /dev/null and b/Chapter01/studiKasus/__pycache__/do_studikasus.cpython-39.pyc differ diff --git a/Chapter01/studiKasus/__pycache__/wadah.cpython-310.pyc b/Chapter01/studiKasus/__pycache__/wadah.cpython-310.pyc new file mode 100644 index 0000000..e9f81f3 Binary files /dev/null and b/Chapter01/studiKasus/__pycache__/wadah.cpython-310.pyc differ diff --git a/Chapter01/studiKasus/classes_studikasus.py b/Chapter01/studiKasus/classes_studikasus.py new file mode 100644 index 0000000..68777ea --- /dev/null +++ b/Chapter01/studiKasus/classes_studikasus.py @@ -0,0 +1,34 @@ +class Karyawan: + def __init__(self, nama, gaji): + self.nama = nama + self.gaji = gaji + + def displayKaryawan(self): + print ("nama : ", self.nama, ", gaji: ", self.gaji) + +emp1 = Karyawan("Udin Wazowski", 2000) +emp2 = Karyawan("Astoria Greengrass", 5000) + +emp1.displayKaryawan() +emp2.displayKaryawan() + +emp1 = Karyawan("Koro koro", 8000) +emp2 = Karyawan("Kucu kucu", 5000) + +emp1.displayKaryawan() +emp2.displayKaryawan() + +class Posisi(Karyawan): + def __init__(self, nama, posisi, gaji): + self.nama = nama + self.posisi = posisi + self.gaji = gaji + + def display(self): + print("Nama : ", self.nama, ", posisi : ", self.posisi, ", gaji : ", self.gaji) + +emp1 = Posisi("TTesting", 'Software Engineer', 4000) +emp2 = Posisi("Astoria", 'HRD', 5000) + +emp1.display() +emp2.display() diff --git a/Chapter01/studiKasus/dir_studikasus.py b/Chapter01/studiKasus/dir_studikasus.py new file mode 100644 index 0000000..f15e837 --- /dev/null +++ b/Chapter01/studiKasus/dir_studikasus.py @@ -0,0 +1,28 @@ +gaji = int(input('Masukan Gaji Karyawan Anda: ')) + +if gaji > 1000000: + print("Selamat Menikmati Uang hasil Kerja Anda") +elif gaji == 0: + print("Anda tidak digaji :(") +else: + print("Jangan Boros ya.") + + +########### +numbers = [13, 15, 20, 22, -99, 50, 4] + +sum = int(input('Masukan Angka Bebas: ')) +# sum = 0 +for val in numbers: + sum = sum+val + +print("The sum is", sum) + +if sum > 0: + print("Positive number") +elif sum == 0: + print("Zero") +else: + print("Negative number") + + diff --git a/Chapter01/studiKasus/do_studikasus.py b/Chapter01/studiKasus/do_studikasus.py new file mode 100644 index 0000000..45b1435 --- /dev/null +++ b/Chapter01/studiKasus/do_studikasus.py @@ -0,0 +1,4 @@ +def totalKaryawan(count, list_karyawan): + for i in range(count): + list_karyawan = ['Udin Wazowski', 'Jon cool', 'Asoyy gamink'] + print('Nama Karyawan : ', list_karyawan) \ No newline at end of file diff --git a/Chapter01/studiKasus/file_studikasus.py b/Chapter01/studiKasus/file_studikasus.py new file mode 100644 index 0000000..44e5a1f --- /dev/null +++ b/Chapter01/studiKasus/file_studikasus.py @@ -0,0 +1,15 @@ +f = open ('file_studikasus.txt', 'w') +nama = input('Masukan Nama Anda :') +alamat = input('Masukan Alamat Anda :') +hobi = input('Masukan Hobi Anda :') +f.write (nama + '\n') + +f.write (alamat + '\n') +f.write (hobi + '\n') + +f.close() +f = open ('file_studikasus.txt') +content = f.read() +print (content) + +f.close() diff --git a/Chapter01/studiKasus/flow_studikasus.py b/Chapter01/studiKasus/flow_studikasus.py new file mode 100644 index 0000000..b571cf3 --- /dev/null +++ b/Chapter01/studiKasus/flow_studikasus.py @@ -0,0 +1,50 @@ +nilai = int(input('Masukan Nilai Ujian Anda : ')) +if nilai >= 75: + print("Selamat Anda Lolos") +elif nilai == 0: + print("Anda Tidak Ikut Ujian") +else: + print("Anda Ikut Remedial") + + +# FOR +durasi_kerja = float(input('masukan durasi kerja: ')) + +if durasi_kerja > 8: + print("Durasi Kerja + Lembur") +elif durasi_kerja == 8: + print("Durasi Kerja Rata-rata") +else: + print("Durasi Kerja Dibawah Rata-Rata") + + +############1 +total_durasi_kerja = [7,8,9] + +durasi_lembur = 4 +for val in total_durasi_kerja: + durasi_lembur = durasi_lembur+val + +print("Total Semua Durasi Kerja", durasi_lembur) + +if durasi_lembur > 12.00: + print("CAPEK") +elif durasi_lembur == 0.00: + print("Anda Kerja ?") +else: + print("Kerja Santai") + + +#WHILE +# Program to add natural numbers upto sum = 1+2+3+...+n + +n = 10 +# initialize sum and counter +sum = 0 +i = 1 +while i <= n: + sum = sum + i + i = i+1 # update counter + +# print the sum +print("The sum is", sum) \ No newline at end of file diff --git a/Chapter01/studiKasus/list_studikasus.py b/Chapter01/studiKasus/list_studikasus.py new file mode 100644 index 0000000..adfa17b --- /dev/null +++ b/Chapter01/studiKasus/list_studikasus.py @@ -0,0 +1,22 @@ +list_Perusahaan = ["Tech, Inc", 200000000, "Indddie", 10000000] #list +print(list_Perusahaan) +list_Perusahaan[0] +print(list_Perusahaan[0]) +list_Perusahaan[-1] +print (list_Perusahaan[-1]) + +dict_perusahaan = {"nama_perusahaan":"Tech, Inc", "nama_ceo":"Mamank Racing"} #dictionary +print(dict_perusahaan) +dict_perusahaan["nama_perusahaan"] +print(dict_perusahaan["nama_perusahaan"]) + +dict_2 = {"key 1":"Udin Wazowski", 2:"Test Doang", "key 3":"Siapa Ya"} +print(dict_2) +dict_2[2] +print(dict_2[2]) + +status_perusahaan = ("Aktif", "Nonaktif") #tuple +print(status_perusahaan) + +panjangData = len +print (panjangData(list_Perusahaan)) diff --git a/Chapter01/studiKasus/multiprocessing_studikasus.py b/Chapter01/studiKasus/multiprocessing_studikasus.py new file mode 100644 index 0000000..20ec4dd --- /dev/null +++ b/Chapter01/studiKasus/multiprocessing_studikasus.py @@ -0,0 +1,25 @@ +from do_studikasus import totalKaryawan +import time +import multiprocessing + +if __name__ == "__main__": + start_time = time.time() + size = 1000 + procs = 10 + list_karyawan = [] + # out_list = list() + for i in range(0, procs): + out_list = list() + process = multiprocessing.Process\ + (target=totalKaryawan,args=(size,out_list)) + list_karyawan.append(process) + + for j in list_karyawan: + j.start() + + for j in list_karyawan: + j.join() + + print ("List processing complete.") + end_time = time.time() + print("multiprocesses time=", end_time - start_time) \ No newline at end of file diff --git a/Chapter01/studiKasus/multithreading_studikasus.py b/Chapter01/studiKasus/multithreading_studikasus.py new file mode 100644 index 0000000..a28b406 --- /dev/null +++ b/Chapter01/studiKasus/multithreading_studikasus.py @@ -0,0 +1,23 @@ +from do_studikasus import totalKaryawan +import time +import threading + +if __name__ == "__main__": + start_time = time.time() + size = 1000 + procs = 10 + process = [] + for i in range(0, procs): + out_list = list() + thread = threading.Thread(target=totalKaryawan(size,out_list)) + process.append(thread) + + for j in process: + j.start() + + for j in process: + j.join() + + print ("List processing complete.") + end_time = time.time() + print("multithreading time=", end_time - start_time) \ No newline at end of file diff --git a/Chapter02/Condition.py b/Chapter02/Condition.py index 828ceec..f35bc83 100644 --- a/Chapter02/Condition.py +++ b/Chapter02/Condition.py @@ -27,7 +27,7 @@ def consume(self): condition.notify() def run(self): - for i in range(20): + for i in range(5): time.sleep(2) self.consume() @@ -50,7 +50,7 @@ def produce(self): condition.notify() def run(self): - for i in range(20): + for i in range(5): time.sleep(0.5) self.produce() diff --git a/Chapter02/Event.py b/Chapter02/Event.py index 4cc0eca..9c241eb 100644 --- a/Chapter02/Event.py +++ b/Chapter02/Event.py @@ -29,7 +29,7 @@ def __init__(self, *args, **kwargs): def run(self): for i in range(5): time.sleep(2) - item = random.randint(0, 100) + item = random.randint(0, 10) items.append(item) logging.info('Producer notify: item {} appended by {}'\ .format(item, self.name)) diff --git a/Chapter02/studiKasus/Barrier_studikasus.py b/Chapter02/studiKasus/Barrier_studikasus.py new file mode 100644 index 0000000..7ba32ce --- /dev/null +++ b/Chapter02/studiKasus/Barrier_studikasus.py @@ -0,0 +1,29 @@ +from random import randrange +from threading import Barrier, Thread +from time import ctime, sleep + +jmlh_org = 3 +kota_tujuan = Barrier(jmlh_org) +orangmudik = ['Asep Gokil', 'Udin Wazowski', 'Papope Cool'] + +def mudik(): + name = orangmudik.pop() + sleep(randrange(2, 5)) # Menunggu sesuai waktu antara 2 sampai 5 detik secara random + print('%s Sampai Ke Kota pada hari: %s \n' % (name, ctime())) + kota_tujuan.wait() # Menunggu semua thread selesai + +def main(): + threads = [] + print('Mudik Dilaksanakan') + # Membuat Thread + for i in range(jmlh_org): + # Membuat thread baru untuk menjalankan function + threads.append(Thread(target=mudik)) + threads[-1].start() + # Menunggu semua thread selesai + for thread in threads: + thread.join() + print('Alhamdulillah, sampai ditempat tujuan dengan selamat') # Thread selesai + +if __name__ == "__main__": + main() diff --git a/Chapter02/studiKasus/MyThreadClass_studikasus.py b/Chapter02/studiKasus/MyThreadClass_studikasus.py new file mode 100644 index 0000000..45e6fff --- /dev/null +++ b/Chapter02/studiKasus/MyThreadClass_studikasus.py @@ -0,0 +1,67 @@ +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 + \ + " running, belonging to process ID "\ + + str(os.getpid()) + "\n") + time.sleep(self.duration) + print ("---> " + self.name + " over\n") + + +def main(): + start_time = time.time() + + # Thread Creation + thread1 = MyThreadClass("Thread#1 ", randint(1,10)) + thread2 = MyThreadClass("Thread#2 ", randint(1,10)) + thread3 = MyThreadClass("Thread#3 ", randint(1,10)) + thread4 = MyThreadClass("Thread#4 ", randint(1,10)) + thread5 = MyThreadClass("Thread#5 ", randint(1,10)) + thread6 = MyThreadClass("Thread#6 ", randint(1,10)) + thread7 = MyThreadClass("Thread#7 ", randint(1,10)) + thread8 = MyThreadClass("Thread#8 ", randint(1,10)) + thread9 = MyThreadClass("Thread#9 ", randint(1,10)) + + # Thread Running + thread1.start() + thread2.start() + thread3.start() + thread4.start() + thread5.start() + thread6.start() + thread7.start() + thread8.start() + thread9.start() + + # Thread joining + thread1.join() + thread2.join() + thread3.join() + thread4.join() + thread5.join() + thread6.join() + thread7.join() + thread8.join() + thread9.join() + + # End + print("End") + + #Execution Time + print("--- %s seconds ---" % (time.time() - start_time)) + + +if __name__ == "__main__": + main() + + + + diff --git a/Chapter02/studiKasus/Queue_studikasus.py b/Chapter02/studiKasus/Queue_studikasus.py new file mode 100644 index 0000000..f85861c --- /dev/null +++ b/Chapter02/studiKasus/Queue_studikasus.py @@ -0,0 +1,51 @@ +from threading import Thread +from queue import Queue +import time +import random + + +class CustomerService(Thread): + + def __init__(self, queue): + Thread.__init__(self) + self.queue = queue + + def run(self): + for i in range(5): + item = random.randint(0, 20) + self.queue.put(item) + print('System memberitahu : antrian nomor %d akan mendapat giliran selanjutnya %s\n'\ + % (item, self.name)) + time.sleep(1) + + +class Costumer(Thread): + + def __init__(self, queue): + Thread.__init__(self) + self.queue = queue + + def run(self): + while True: + item = self.queue.get() + print('%d muncul dari antrian oleh %s'\ + % (item, self.name)) + self.queue.task_done() + +if __name__ == '__main__': + queue = Queue() + + t1 = CustomerService(queue) + t2 = Costumer(queue) + t3 = Costumer(queue) + t4 = Costumer(queue) + + t1.start() + t2.start() + t3.start() + t4.start() + + t1.join() + t2.join() + t3.join() + t4.join() diff --git a/Chapter02/studiKasus/Thread_definition_studikasus.py b/Chapter02/studiKasus/Thread_definition_studikasus.py new file mode 100644 index 0000000..0024609 --- /dev/null +++ b/Chapter02/studiKasus/Thread_definition_studikasus.py @@ -0,0 +1,23 @@ +from random import randint +import threading +import time + + +def waktu(thread_number): + count = 0 + while count < 5: + time.sleep(randint(0,7)) + count += 1 + return print(thread_number, time.ctime(time.time())) + + +def main(): + threads = [] + for i in range(5): + t = threading.Thread(target=waktu, args=(i,)) + threads.append(t) + t.start() + t.join() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/Chapter03/studikasus/__pycache__/myFunc_studikasus.cpython-310.pyc b/Chapter03/studikasus/__pycache__/myFunc_studikasus.cpython-310.pyc new file mode 100644 index 0000000..8e95311 Binary files /dev/null and b/Chapter03/studikasus/__pycache__/myFunc_studikasus.cpython-310.pyc differ diff --git a/Chapter03/studikasus/communicating_with_pipe_studikasus.py b/Chapter03/studikasus/communicating_with_pipe_studikasus.py new file mode 100644 index 0000000..41eeb29 --- /dev/null +++ b/Chapter03/studikasus/communicating_with_pipe_studikasus.py @@ -0,0 +1,26 @@ +import multiprocessing + +def admin(conn, events): + for event in events: + conn.send(event) + print(f"Admin mengcheck informasi: {event}") + +def user(conn): + while True: + event = conn.recv() + if event == "tolak": + print("Role user tidak di approve") + return + print(f"username: {event} diapprove menjadi Owner") + + + +if __name__ == "__main__": + events = ["udinkeren", "papopeee", "Pack Brodi the guardian of kos", "Harry Potter", "tolak"] + conn1, conn2 = multiprocessing.Pipe() + process_1 = multiprocessing.Process(target=admin, args=(conn1, events)) + process_2 = multiprocessing.Process(target=user, args=(conn2,)) + process_1.start() + process_2.start() + process_1.join() + process_2.join() \ No newline at end of file diff --git a/Chapter03/studikasus/communicating_with_queue_studikasus.py b/Chapter03/studikasus/communicating_with_queue_studikasus.py new file mode 100644 index 0000000..89e75a9 --- /dev/null +++ b/Chapter03/studikasus/communicating_with_queue_studikasus.py @@ -0,0 +1,52 @@ +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 : User dengan ID %d Merequest Role sebagai Pemilik"\ + % (kostrakan)) + time.sleep(1) + print ("Jumlah User yang melakukan Request %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 User yang request Role :(") + 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() + + + + + diff --git a/Chapter03/studikasus/killing_process_studikasus.py b/Chapter03/studikasus/killing_process_studikasus.py new file mode 100644 index 0000000..978b783 --- /dev/null +++ b/Chapter03/studikasus/killing_process_studikasus.py @@ -0,0 +1,20 @@ +import multiprocessing +import time + +def startprocess(): + print ('Start') + time.sleep(0.1) + print ('Finish') + +if __name__ == '__main__': + process = multiprocessing.Process(target=startprocess) + print ('Sebelum Eksekusi:', process, process.is_alive()) + + process.start() + print ('Check saat proses Berjalan:', process, process.is_alive()) + + process.terminate() + print ('Check saat proses Dihentikan:', process, process.is_alive()) + + process.join() + print ('Proses join:', process, process.is_alive()) \ No newline at end of file diff --git a/Chapter03/studikasus/myFunc_studikasus.py b/Chapter03/studikasus/myFunc_studikasus.py new file mode 100644 index 0000000..230b4de --- /dev/null +++ b/Chapter03/studikasus/myFunc_studikasus.py @@ -0,0 +1,5 @@ +def iniFunction(i): + print ('Mengecheck user dengan Role: %s' %i) + for j in range (0,i): + print('Jumlah User :%s' %j) + return \ No newline at end of file diff --git a/Chapter03/studikasus/naming_process_studikasus.py b/Chapter03/studikasus/naming_process_studikasus.py new file mode 100644 index 0000000..3909447 --- /dev/null +++ b/Chapter03/studikasus/naming_process_studikasus.py @@ -0,0 +1,24 @@ +import multiprocessing +import time +import random + +def approveRole(): + name = multiprocessing.current_process().name + userId = random.randrange(0, 20) + print ("Admin mulai melakukan = %s \n" %name) + time.sleep(3) + print ("Admin selesai mengapprove Role Request user dengan ID %s sebagai Owner \n" %userId) + +if __name__ == '__main__': + process_with_name = multiprocessing.Process\ + (name='Approve Role User',\ + target=approveRole) + + process_with_default_name = multiprocessing.Process\ + (target=approveRole) + + process_with_name.start() + process_with_default_name.start() + + process_with_name.join() + process_with_default_name.join() \ No newline at end of file diff --git a/Chapter03/studikasus/process_pool_studikasus.py b/Chapter03/studikasus/process_pool_studikasus.py new file mode 100644 index 0000000..2c685a4 --- /dev/null +++ b/Chapter03/studikasus/process_pool_studikasus.py @@ -0,0 +1,32 @@ +#Using a Process Pool – Chapter 3: Process Based Parallelism +import multiprocessing +from time import ctime, sleep +import random +import time + +def test(data): + result = data*data + return result + +bangunan1 = 'Kos' +bangunan2 = 'Kontrakan' +nama = ['Pack Udien', 'Bu Marinie'] + +if __name__ == '__main__': + inputs1 = list(range(9,10)) + inputs2 = list(range(19,20)) + + pool = multiprocessing.Pool(processes=4) + pool_outputs1 = pool.map(test, inputs1) + pool_outputs2 = pool.map(test, inputs2) + + pencari1 = bangunan1 + pencari2 = bangunan2 + + time.sleep(random.randrange(0, 10)) + print (f'Pencarian Tempat Hidup Sementara: \n Jenis Bangunan: %s \n Nomor Bangunan: %s \n Tanggal: %s \n' % (pencari1, pool_outputs1, ctime())) + print (f'Pencarian Tempat Hidup Sementara: \n Jenis Bangunan: %s \n Nomor Bangunan: %s \n Tanggal: %s \n' % (pencari2, pool_outputs2, ctime())) + + pool.close() + pool.join() + print('Selesai') \ No newline at end of file diff --git a/Chapter03/studikasus/spawning_process_namespace.py b/Chapter03/studikasus/spawning_process_namespace.py new file mode 100644 index 0000000..1710b40 --- /dev/null +++ b/Chapter03/studikasus/spawning_process_namespace.py @@ -0,0 +1,8 @@ +import multiprocessing +from myFunc_studikasus import iniFunction + +if __name__ == '__main__': + for i in range(5): + process = multiprocessing.Process(target=iniFunction, args=(i,)) + process.start() + process.join() \ No newline at end of file diff --git a/Chapter03/studikasus/spawning_process_studikasus.py b/Chapter03/studikasus/spawning_process_studikasus.py new file mode 100644 index 0000000..ef7f475 --- /dev/null +++ b/Chapter03/studikasus/spawning_process_studikasus.py @@ -0,0 +1,14 @@ +#Spawn a Process – Chapter 3: Process Based Parallelism +import multiprocessing + +def inifunction(i): + print ('Mengecheck user dengan Role: %s' %i) + for j in range (0,i): + print('Jumlah User :%s' %j) + return + +if __name__ == '__main__': + for i in range(5): + process = multiprocessing.Process(target=inifunction, args=(i,)) + process.start() + process.join() \ No newline at end of file diff --git a/Chapter05/Praktikum/asyncio_coroutine.py b/Chapter05/Praktikum/asyncio_coroutine.py new file mode 100644 index 0000000..aaab37b --- /dev/null +++ b/Chapter05/Praktikum/asyncio_coroutine.py @@ -0,0 +1,75 @@ +import asyncio +import time +from random import randint + + +@asyncio.coroutine +def memulai_aktivitas(): + print('Mendatangi toko buku\n') + input_value = randint(0, 1) + time.sleep(1) + + if input_value == 0: + result = yield from aktivitas_2(input_value) + else: + result = yield from aktivitas_1(input_value) + + print('Memulai aktivitas dengan ' + result) + + +@asyncio.coroutine +def aktivitas_1(transition_value): + output_value = 'Memilih buku dengan transition value = %s\n' % transition_value + input_value = randint(0, 1) + time.sleep(1) + + print('...mengevaluasi...') + if input_value == 0: + result = yield from aktivitas_3(input_value) + else: + result = yield from aktivitas_2(input_value) + + return output_value + 'Aktivitas 1 dilanjutkan dengan %s' % result + + +@asyncio.coroutine +def aktivitas_2(transition_value): + output_value = 'Mengecek buku dengan transition value = %s\n' % transition_value + input_value = randint(0, 1) + time.sleep(1) + + print('...mengevaluasi...') + if input_value == 0: + result = yield from aktivitas_1(input_value) + else: + result = yield from aktivitas_3(input_value) + + return output_value + 'Aktivitas 2 dilanjutkan dengan %s' % result + + +@asyncio.coroutine +def aktivitas_3(transition_value): + output_value = 'Membeli buku dengan transition value = %s\n' % transition_value + input_value = randint(0, 1) + time.sleep(1) + + print('...mengevaluasi...') + if input_value == 0: + result = yield from aktivitas_1(input_value) + else: + result = yield from mengakhiri_aktivitas(input_value) + + return output_value + 'Aktivitas 3 dilanjutkan dengan %s' % result + + +@asyncio.coroutine +def mengakhiri_aktivitas(transition_value): + output_value = 'Membawa buku dengan transition value = %s\n' % transition_value + print('...aktivitas berhenti...') + return output_value + + +if __name__ == '__main__': + print('Finite State Machine simulation with Asyncio Coroutine') + loop = asyncio.get_event_loop() + loop.run_until_complete(memulai_aktivitas()) diff --git a/Chapter05/Praktikum/asyncio_event_loop.py b/Chapter05/Praktikum/asyncio_event_loop.py new file mode 100644 index 0000000..4d7db88 --- /dev/null +++ b/Chapter05/Praktikum/asyncio_event_loop.py @@ -0,0 +1,49 @@ +import asyncio +import time +import random + +print("Mengecek Ketersediaan Buku") + +def buku_A(end_time, loop): + print ("Buku A") + print ("Mengecek ketersediaan Buku A") + time.sleep(random.randint(0, 5)) + if (loop.time() + 1.0) < end_time: + loop.call_later(1, buku_B, end_time, loop) + print("Buku kosong, lanjut mengecek buku lainnya") + else: + print("Buku tersedia dan dapat dijual") + print(end_time) + loop.stop() + +def buku_B(end_time, loop): + print ("Buku B") + print ("Mengecek ketersediaan Buku B") + time.sleep(random.randint(0, 5)) + if (loop.time() + 1.0) < end_time: + loop.call_later(1, buku_C, end_time, loop) + print("Buku kosong, lanjut mengecek buku lainnya") + else: + print("Buku tersedia dan dapat dijual") + print(end_time) + loop.stop() + +def buku_C(end_time, loop): + print ("Buku C") + print ("Mengecek ketersediaan Buku B") + time.sleep(random.randint(0, 5)) + if (loop.time() + 1.0) < end_time: + loop.call_later(1, buku_A, end_time, loop) + print("Buku kosong, lanjut mengecek buku lainnya") + else: + print("Buku tersedia dan dapat dijual") + print(end_time) + loop.stop() + + +loop = asyncio.get_event_loop() +end_loop = loop.time() + 30 +loop.call_soon(buku_A, end_loop, loop) +loop.run_forever() +loop.close() + diff --git a/Chapter05/Praktikum/concurrent_futures_pooling.py b/Chapter05/Praktikum/concurrent_futures_pooling.py new file mode 100644 index 0000000..8fb488a --- /dev/null +++ b/Chapter05/Praktikum/concurrent_futures_pooling.py @@ -0,0 +1,38 @@ +import concurrent.futures +import time + +jumlah_buku = list(range(1, 5)) + + +def menghitung(number): + for i in range(50000): + i += 1 + return i*number + + +def menilai(item): + result_item = menghitung(item) + print('Jika anda membeli %s buku, harganya %s' % (item, result_item)) + +if __name__ == '__main__': + # Sequential Execution + start_time = time.process_time() + for item in jumlah_buku: + menilai(item) + print('Waktu eksekusi Sequential dalam %s detik' % (time.process_time() - start_time)) + + + # Thread Pool Execution + start_time = time.process_time() + with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: + for item in jumlah_buku: + executor.submit(menilai, item) + print('Waktu eksekusi Thread Pool dalam %s detik' % (time.process_time() - start_time)) + + + # Process Pool Execution + start_time = time.process_time() + with concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor: + for item in jumlah_buku: + executor.submit(menilai, item) + print('Waktu eksekusi Process Pool dalam %s detik' % (time.process_time() - start_time)) diff --git a/Chapter05/Praktikum/praktikum_asyncio_coroutine.py b/Chapter05/Praktikum/praktikum_asyncio_coroutine.py new file mode 100644 index 0000000..7566f2d --- /dev/null +++ b/Chapter05/Praktikum/praktikum_asyncio_coroutine.py @@ -0,0 +1,75 @@ +import asyncio +import time +from random import randint + + +@asyncio.coroutine +def start_state(): + print('Memulai Tahapan awal\n') + input_value = randint(0, 1) + time.sleep(1) + + if input_value == 0: + result = yield from tahap2(input_value) + else: + result = yield from tahap1(input_value) + + print('Mencoba Coroutine : \nStart State menuju ' + result) + + +@asyncio.coroutine +def tahap1(transition_value): + output_value = 'Tahap 1 dengan value = %s\n' % transition_value + input_value = randint(0, 1) + time.sleep(1) + + print('...Mengevaluasi Tahapan...') + if input_value == 0: + result = yield from tahap3(input_value) + else: + result = yield from tahap2(input_value) + + return output_value + 'Tahap 1 menuju %s' % result + + +@asyncio.coroutine +def tahap2(transition_value): + output_value = 'Tahap 2 dengan value = %s\n' % transition_value + input_value = randint(0, 1) + time.sleep(1) + + print('...Mengevaluasi Tahapan...') + if input_value == 0: + result = yield from tahap1(input_value) + else: + result = yield from tahap3(input_value) + + return output_value + 'Tahap 2 menuju %s' % result + + +@asyncio.coroutine +def tahap3(transition_value): + output_value = 'Tahap 3 dengan value = %s\n' % transition_value + input_value = randint(0, 1) + time.sleep(1) + + print('...Mengevaluasi Tahapan...') + if input_value == 0: + result = yield from tahap1(input_value) + else: + result = yield from end_state(input_value) + + return output_value + 'Tahap 3 menuju %s' % result + + +@asyncio.coroutine +def end_state(transition_value): + output_value = 'Tahap akhir value = %s\n' % transition_value + print('...stop computation...') + return output_value + + +if __name__ == '__main__': + print('Finite state Machine simulation with Asyncio Coroutine') + loop = asyncio.get_event_loop() + loop.run_until_complete(start_state()) diff --git a/Chapter05/Praktikum/praktikum_asyncio_event_looping.py b/Chapter05/Praktikum/praktikum_asyncio_event_looping.py new file mode 100644 index 0000000..6cc1f8b --- /dev/null +++ b/Chapter05/Praktikum/praktikum_asyncio_event_looping.py @@ -0,0 +1,45 @@ +import asyncio +import time +import random + +def task_A(end_time, loop): + print ("task_A dijalankan") + start_time = time.time() + time.sleep(random.randint(0, 5)) + if (loop.time() + 1.0) < end_time: + print('Proses tidak memenuhi kebutuhan, melanjutkan ke proses selanjutnya', (loop.time() + 1.0) < end_time) + loop.call_later(1, task_B, end_time, loop) + else: + print('Proses memenuhi kebutuhan, menghentikan proses', (loop.time() + 1.0) < end_time) + loop.stop() + +def task_B(end_time, loop): + print ("task_B dijalankan ") + start_time = time.time() + time.sleep(random.randint(0, 5)) + if (loop.time() + 1.0) < end_time: + print('Proses tidak memenuhi kebutuhan, melanjutkan ke proses selanjutnya', (loop.time() + 1.0) < end_time) + loop.call_later(1, task_C, end_time, loop) + else: + print('Proses memenuhi kebutuhan, menghentikan proses', (loop.time() + 1.0) < end_time) + loop.stop() + +def task_C(end_time, loop): + print ("task_C dijalankan") + start_time = time.time() + time.sleep(random.randint(0, 5)) + if (loop.time() + 1.0) < end_time: + print('Proses tidak memenuhi kebutuhan, melanjutkan ke proses selanjutnya', (loop.time() + 1.0) < end_time) + loop.call_later(1, task_A, end_time, loop) + else: + print('Proses memenuhi kebutuhan, melanjutkan ke proses selanjutnya', (loop.time() + 1.0) < end_time) + print('Proses Dihentikan') + loop.stop() + + +loop = asyncio.get_event_loop() +end_loop = loop.time() + 60 +loop.call_soon(task_A, end_loop, loop) +loop.run_forever() +loop.close() + diff --git a/Chapter05/Praktikum/praktikum_asyncio_futures.py b/Chapter05/Praktikum/praktikum_asyncio_futures.py new file mode 100644 index 0000000..debbfe8 --- /dev/null +++ b/Chapter05/Praktikum/praktikum_asyncio_futures.py @@ -0,0 +1,41 @@ +import asyncio +import sys + + +@asyncio.coroutine +def first_coroutine(future, num): + count = 0 + for i in range(1, num + 1): + count += 1 + yield from asyncio.sleep(4) + future.set_result('First coroutine (sum of N ints) result = %s' % count) + + +@asyncio.coroutine +def second_coroutine(future, num): + count = 1 + for i in range(2, num + 1): + count *= i + yield from asyncio.sleep(4) + future.set_result('Second coroutine (factorial) result = %s' % count) + + +def got_result(future): + print(future.result()) + +if __name__ == '__main__': + num1 = int(sys.argv[1]) + num2 = int(sys.argv[2]) + + loop = asyncio.get_event_loop() + future1 = asyncio.Future() + future2 = asyncio.Future() + + tasks = [first_coroutine(future1, num1), + second_coroutine(future2, num2)] + + future1.add_done_callback(got_result) + future2.add_done_callback(got_result) + + loop.run_until_complete(asyncio.wait(tasks)) + loop.close() \ No newline at end of file diff --git a/Chapter05/Praktikum/praktikum_asyncio_futures_pooling.py b/Chapter05/Praktikum/praktikum_asyncio_futures_pooling.py new file mode 100644 index 0000000..8f23bed --- /dev/null +++ b/Chapter05/Praktikum/praktikum_asyncio_futures_pooling.py @@ -0,0 +1,39 @@ +import concurrent.futures +import time +time.clock = time.time + +number_list = list(range(1, 5)) + + +def count(number): + for i in range(9999): + i += 1 + return i*number + + +def evaluate(item): + result_item = count(item) + print('Item %s, result %s' % (item, result_item)) + +if __name__ == '__main__': + # Sequential Execution + start_time = time.clock() + for item in number_list: + evaluate(item) + print('Sequential Execution in %s seconds' % (time.clock() - start_time)) + + + # Thread Pool Execution + start_time = time.clock() + with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: + for item in number_list: + executor.submit(evaluate, item) + print('Thread Pool Execution in %s seconds' % (time.clock() - start_time)) + + + # Process Pool Execution + start_time = time.clock() + with concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor: + for item in number_list: + executor.submit(evaluate, item) + print('Process Pool Execution in %s seconds' % (time.clock() - start_time)) diff --git a/Chapter05/Praktikum/test_manipulation.py b/Chapter05/Praktikum/test_manipulation.py new file mode 100644 index 0000000..fc67107 --- /dev/null +++ b/Chapter05/Praktikum/test_manipulation.py @@ -0,0 +1,42 @@ +"""Asyncio using Asyncio.Task to execute three math functions in parallel""" + +import asyncio + + +@asyncio.coroutine +def factorial(number): + fact = 1 + for i in range(2, number + 1): + print('Asyncio.Task: Compute factorial(%s)' % i) + yield from asyncio.sleep(1) + fact *= i + print('Asyncio.Task - factorial(%s) = %s' % (number, fact)) + + +@asyncio.coroutine +def fibonacci(number): + a, b = 0, 1 + for i in range(number): + print('Asyncio.Task: Compute fibonacci(%s)' % i) + yield from asyncio.sleep(1) + a, b = b, a + b + print('Asyncio.Task - fibonacci(%s) = %s' % (number, a)) + + +@asyncio.coroutine +def binomial_coefficient(n, k): + result = 1 + for i in range(1, k + 1): + result = result*(n - i + 1)/i + print('Asyncio.Task: Compute binomial_coefficient(%s)' % i) + yield from asyncio.sleep(1) + print('Asyncio.Task - binomial_coefficient(%s, %s) = %s' % (n, k, result)) + + +if __name__ == '__main__': + task_list = [asyncio.Task(factorial(5)), + asyncio.Task(fibonacci(5)), + asyncio.Task(binomial_coefficient(10, 5))] + loop = asyncio.get_event_loop() + loop.run_until_complete(asyncio.wait(task_list)) + loop.close() diff --git a/Chapter05/Studi Kasus/asyncio_and_futures.py b/Chapter05/Studi Kasus/asyncio_and_futures.py new file mode 100644 index 0000000..bf7f2b4 --- /dev/null +++ b/Chapter05/Studi Kasus/asyncio_and_futures.py @@ -0,0 +1,41 @@ +import asyncio +import sys + + +@asyncio.coroutine +def first_coroutine(future, num): + count = 0 + for i in range(1, num + 1): + count += 1 + yield from asyncio.sleep(4) + future.set_result('First coroutine (sum of N ints) result = %s' % count) + + +@asyncio.coroutine +def second_coroutine(future, num): + count = 1 + for i in range(2, num + 1): + count *= i + yield from asyncio.sleep(4) + future.set_result('Second coroutine (factorial) result = %s' % count) + + +def got_result(future): + print(future.result()) + +if __name__ == '__main__': + num1 = int(len(sys.argv[0])) + num2 = int(len(sys.argv[0])) + + loop = asyncio.get_event_loop() + future1 = asyncio.Future() + future2 = asyncio.Future() + + tasks = [first_coroutine(future1, num1), + second_coroutine(future2, num2)] + + future1.add_done_callback(got_result) + future2.add_done_callback(got_result) + + loop.run_until_complete(asyncio.wait(tasks)) + loop.close() \ No newline at end of file diff --git a/Chapter05/Studi Kasus/asyncio_coroutine.py b/Chapter05/Studi Kasus/asyncio_coroutine.py new file mode 100644 index 0000000..25d56a2 --- /dev/null +++ b/Chapter05/Studi Kasus/asyncio_coroutine.py @@ -0,0 +1,75 @@ +import asyncio +import time +from random import randint + + +@asyncio.coroutine +def memulai_aktivitas(): + print('Mendatangi toko buku\n') + input_value = randint(0, 1) + time.sleep(1) + + if input_value == 0: + result = yield from aktivitas_2(input_value) + else: + result = yield from aktivitas_1(input_value) + + print('Memulai aktivitas dengan ' + result) + + +@asyncio.coroutine +def aktivitas_1(transition_value): + output_value = 'Memilih buku dengan transition value = %s\n' % transition_value + input_value = randint(0, 1) + time.sleep(1) + + print('...mengevaluasi...') + if input_value == 0: + result = yield from aktivitas_3(input_value) + else: + result = yield from aktivitas_2(input_value) + + return output_value + 'Aktivitas 1 dilanjutkan dengan %s' % result + + +@asyncio.coroutine +def aktivitas_2(transition_value): + output_value = 'Mengecek buku dengan transition value = %s\n' % transition_value + input_value = randint(0, 1) + time.sleep(1) + + print('...mengevaluasi...') + if input_value == 0: + result = yield from aktivitas_1(input_value) + else: + result = yield from aktivitas_3(input_value) + + return output_value + 'Aktivitas 2 dilanjutkan dengan %s' % result + + +@asyncio.coroutine +def aktivitas_3(transition_value): + output_value = 'Membeli buku dengan transition value = %s\n' % transition_value + input_value = randint(0, 1) + time.sleep(1) + + print('...mengevaluasi...') + if input_value == 0: + result = yield from aktivitas_1(input_value) + else: + result = yield from mengakhiri_aktivitas(input_value) + + return output_value + 'Aktivitas 3 dilanjutkan dengan %s' % result + + +@asyncio.coroutine +def mengakhiri_aktivitas(transition_value): + output_value = 'Membawa buku dengan transition value = %s\n' % transition_value + print('...menghentikan evaluasi...') + return output_value + + +if __name__ == '__main__': + print('Finite State Machine simulation with Asyncio Coroutine') + loop = asyncio.get_event_loop() + loop.run_until_complete(memulai_aktivitas()) diff --git a/Chapter05/Studi Kasus/asyncio_event_loop.py b/Chapter05/Studi Kasus/asyncio_event_loop.py new file mode 100644 index 0000000..4d7db88 --- /dev/null +++ b/Chapter05/Studi Kasus/asyncio_event_loop.py @@ -0,0 +1,49 @@ +import asyncio +import time +import random + +print("Mengecek Ketersediaan Buku") + +def buku_A(end_time, loop): + print ("Buku A") + print ("Mengecek ketersediaan Buku A") + time.sleep(random.randint(0, 5)) + if (loop.time() + 1.0) < end_time: + loop.call_later(1, buku_B, end_time, loop) + print("Buku kosong, lanjut mengecek buku lainnya") + else: + print("Buku tersedia dan dapat dijual") + print(end_time) + loop.stop() + +def buku_B(end_time, loop): + print ("Buku B") + print ("Mengecek ketersediaan Buku B") + time.sleep(random.randint(0, 5)) + if (loop.time() + 1.0) < end_time: + loop.call_later(1, buku_C, end_time, loop) + print("Buku kosong, lanjut mengecek buku lainnya") + else: + print("Buku tersedia dan dapat dijual") + print(end_time) + loop.stop() + +def buku_C(end_time, loop): + print ("Buku C") + print ("Mengecek ketersediaan Buku B") + time.sleep(random.randint(0, 5)) + if (loop.time() + 1.0) < end_time: + loop.call_later(1, buku_A, end_time, loop) + print("Buku kosong, lanjut mengecek buku lainnya") + else: + print("Buku tersedia dan dapat dijual") + print(end_time) + loop.stop() + + +loop = asyncio.get_event_loop() +end_loop = loop.time() + 30 +loop.call_soon(buku_A, end_loop, loop) +loop.run_forever() +loop.close() + diff --git a/Chapter05/Studi Kasus/asyncio_task_manipulation.py b/Chapter05/Studi Kasus/asyncio_task_manipulation.py new file mode 100644 index 0000000..8f31013 --- /dev/null +++ b/Chapter05/Studi Kasus/asyncio_task_manipulation.py @@ -0,0 +1,42 @@ +"""Asyncio using Asyncio.Task to execute three math functions in parallel""" + +import asyncio + + +@asyncio.coroutine +def factorial(number): + fact = 1 + for i in range(2, number + 1): + print('Asyncio.Task: Compute factorial(%s)' % i) + yield from asyncio.sleep(1) + fact *= i + print('Asyncio.Task - factorial(%s) = %s' % (number, fact)) + + +@asyncio.coroutine +def fibonacci(number): + a, b = 0, 1 + for i in range(number): + print('Asyncio.Task: Compute fibonacci(%s)' % i) + yield from asyncio.sleep(1) + a, b = b, a + b + print('Asyncio.Task - fibonacci(%s) = %s' % (number, a)) + + +@asyncio.coroutine +def binomial_coefficient(n, k): + result = 1 + for i in range(1, k + 1): + result = result*(n - i + 1)/i + print('Asyncio.Task: Compute binomial_coefficient(%s)' % i) + yield from asyncio.sleep(1) + print('Asyncio.Task - binomial_coefficient(%s, %s) = %s' % (n, k, result)) + + +if __name__ == '__main__': + task_list = [asyncio.Task(factorial(10)), + asyncio.Task(fibonacci(10)), + asyncio.Task(binomial_coefficient(20, 10))] + loop = asyncio.get_event_loop() + loop.run_until_complete(asyncio.wait(task_list)) + loop.close() diff --git a/Chapter05/Studi Kasus/concurrent_futures_pooling.py b/Chapter05/Studi Kasus/concurrent_futures_pooling.py new file mode 100644 index 0000000..0228a2e --- /dev/null +++ b/Chapter05/Studi Kasus/concurrent_futures_pooling.py @@ -0,0 +1,36 @@ +import concurrent.futures +import time + +jumlah_buku = list(range(1, 5)) + +def menghitung(number): + for i in range(0,50000): + i += 1 + return i*number + +def menilai(item): + result_item = menghitung(item) + print('Jika anda membeli %s buku, harganya %s' % (item, result_item)) + +if __name__ == '__main__': + # Sequential Execution + start_time = time.process_time() + for item in jumlah_buku: + menilai(item) + print('Waktu yang dibutuhkan untuk eksekusi Sequential yaitu %s detik' % (time.process_time() - start_time)) + + + # Thread Pool Execution + start_time = time.process_time() + with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: + for item in jumlah_buku: + executor.submit(menilai, item) + print('Waktu yang dibutuhkan untuk eksekusi Thread Pool yaitu %s detik' % (time.process_time() - start_time)) + + + # Process Pool Execution + start_time = time.process_time() + with concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor: + for item in jumlah_buku: + executor.submit(menilai, item) + print('Waktu yang dibutuhkan untuk eksekusi Process Pool yaitu %s detik' % (time.process_time() - start_time)) diff --git a/Chapter05/concurrent_futures_pooling.py b/Chapter05/concurrent_futures_pooling.py index 1074723..075b7bc 100644 --- a/Chapter05/concurrent_futures_pooling.py +++ b/Chapter05/concurrent_futures_pooling.py @@ -1,5 +1,6 @@ import concurrent.futures import time +time.clock = time.time number_list = list(range(1, 11)) diff --git a/Chapter06/Celery/__pycache__/addTask.cpython-310.pyc b/Chapter06/Celery/__pycache__/addTask.cpython-310.pyc new file mode 100644 index 0000000..f6c7290 Binary files /dev/null and b/Chapter06/Celery/__pycache__/addTask.cpython-310.pyc differ diff --git a/Chapter06/Celery/praktikum/__pycache__/tugas.cpython-310.pyc b/Chapter06/Celery/praktikum/__pycache__/tugas.cpython-310.pyc new file mode 100644 index 0000000..2c7d069 Binary files /dev/null and b/Chapter06/Celery/praktikum/__pycache__/tugas.cpython-310.pyc differ diff --git a/Chapter06/Celery/praktikum/tugas.py b/Chapter06/Celery/praktikum/tugas.py new file mode 100644 index 0000000..3496855 --- /dev/null +++ b/Chapter06/Celery/praktikum/tugas.py @@ -0,0 +1,12 @@ +from celery import Celery +import time +app = Celery('tugas',broker='amqp://guest@localhost//') + +@app.task +def longtime_add(x, y): + print('tugas dimulai') + # sleep 5 detik + time.sleep(5) + print('tugas telah selesai') + return x + y + \ No newline at end of file diff --git a/Chapter06/Celery/praktikum/tugas_jalan.py b/Chapter06/Celery/praktikum/tugas_jalan.py new file mode 100644 index 0000000..26fcd6c --- /dev/null +++ b/Chapter06/Celery/praktikum/tugas_jalan.py @@ -0,0 +1,9 @@ +import tugas +import time + +if __name__ == '__main__': + result = tugas.longtime_add.delay(1,2) + print ('Menunggu Proses Selesai ') + time.sleep(10) + print ('Proses telah selesai') + \ No newline at end of file diff --git a/Chapter06/Pyro4/StudiKasus/FirstExample/pyro_client.py b/Chapter06/Pyro4/StudiKasus/FirstExample/pyro_client.py new file mode 100644 index 0000000..5f05483 --- /dev/null +++ b/Chapter06/Pyro4/StudiKasus/FirstExample/pyro_client.py @@ -0,0 +1,13 @@ +import Pyro4 + +#uri = input("insert the PYRO4 server URI (help : PYRONAME:server) ").strip() +name = input("Siapa nama anda? ").strip() +npm = input("Berapa npm anda? ").strip() +major = input("Jurusan apakah anda? ").strip() +# use name server object lookup uri shortcut +server = Pyro4.Proxy("PYRONAME:server") +print(server.welcomeMessage(name, npm, major)) + + + + diff --git a/Chapter06/Pyro4/StudiKasus/FirstExample/pyro_server.py b/Chapter06/Pyro4/StudiKasus/FirstExample/pyro_server.py new file mode 100644 index 0000000..cdf7ce8 --- /dev/null +++ b/Chapter06/Pyro4/StudiKasus/FirstExample/pyro_server.py @@ -0,0 +1,25 @@ +import Pyro4 + +class Server(object): + @Pyro4.expose + def welcomeMessage(self, name, npm, major): + return ("Halo selamat datang " + str(name) + " \ndengan npm " + str(npm) + " \ndari jurusan " + str(major)) + +def startServer(): + server = Server() + # make a Pyro daemon + daemon = Pyro4.Daemon() + # locate the name server running + ns = Pyro4.locateNS() + # register the server as a Pyro object + uri = daemon.register(server) + # register the object with a name in the name server + ns.register("server", uri) + # print the uri so we can use it in the client later + print("Server siap. Object uri =", uri) + # start the event loop of the server to wait for calls + daemon.requestLoop() + +if __name__ == "__main__": + startServer() + diff --git a/Chapter06/Pyro4/StudiKasus/SecondExample/__pycache__/chainTopology.cpython-310.pyc b/Chapter06/Pyro4/StudiKasus/SecondExample/__pycache__/chainTopology.cpython-310.pyc new file mode 100644 index 0000000..cf9f9e8 Binary files /dev/null and b/Chapter06/Pyro4/StudiKasus/SecondExample/__pycache__/chainTopology.cpython-310.pyc differ diff --git a/Chapter06/Pyro4/StudiKasus/SecondExample/__pycache__/chainTopology.cpython-35.pyc b/Chapter06/Pyro4/StudiKasus/SecondExample/__pycache__/chainTopology.cpython-35.pyc new file mode 100644 index 0000000..fa4ade0 Binary files /dev/null and b/Chapter06/Pyro4/StudiKasus/SecondExample/__pycache__/chainTopology.cpython-35.pyc differ diff --git a/Chapter06/Pyro4/StudiKasus/SecondExample/chainTopology.py b/Chapter06/Pyro4/StudiKasus/SecondExample/chainTopology.py new file mode 100644 index 0000000..e0dbb0a --- /dev/null +++ b/Chapter06/Pyro4/StudiKasus/SecondExample/chainTopology.py @@ -0,0 +1,21 @@ +import Pyro4 + +@Pyro4.expose +class Chain(object): + def __init__(self, name, current_server): + self.name = name + self.current_serverName = current_server + self.current_server = None + + def process(self, message): + if self.current_server is None: + self.current_server = Pyro4.core.Proxy("PYRONAME:example.chainTopology." + self.current_serverName) + if self.name in message: + print("Kembali ke server %s; pengiriman message sudah selesai!" % self.name) + return ["Mengiriman message sudah selesai pada " + self.name] + else: + print("Dari server %s meneruskan message ke server %s" % (self.name, self.current_serverName)) + message.append(self.name) + result = self.current_server.process(message) + result.insert(0, "diturunkan dari server " + self.name) + return result diff --git a/Chapter06/Pyro4/StudiKasus/SecondExample/client_chain.py b/Chapter06/Pyro4/StudiKasus/SecondExample/client_chain.py new file mode 100644 index 0000000..2528428 --- /dev/null +++ b/Chapter06/Pyro4/StudiKasus/SecondExample/client_chain.py @@ -0,0 +1,5 @@ +from __future__ import print_function +import Pyro4 + +obj = Pyro4.core.Proxy("PYRONAME:example.chainTopology.1") +print("Hasil=%s" % obj.process(["halo"])) diff --git a/Chapter06/Pyro4/StudiKasus/SecondExample/desktop.ini b/Chapter06/Pyro4/StudiKasus/SecondExample/desktop.ini new file mode 100644 index 0000000..d1ead95 --- /dev/null +++ b/Chapter06/Pyro4/StudiKasus/SecondExample/desktop.ini @@ -0,0 +1,2 @@ +[LocalizedFileNames] +Command Prompt.lnk=@%SystemRoot%\system32\shell32.dll,-22022 diff --git a/Chapter06/Pyro4/StudiKasus/SecondExample/server_chain_1.py b/Chapter06/Pyro4/StudiKasus/SecondExample/server_chain_1.py new file mode 100644 index 0000000..41e13a4 --- /dev/null +++ b/Chapter06/Pyro4/StudiKasus/SecondExample/server_chain_1.py @@ -0,0 +1,18 @@ +import Pyro4 +import chainTopology + +current_server = "1" +next_server = "2" + +servername = "example.chainTopology." + current_server + +daemon = Pyro4.core.Daemon() +obj = chainTopology.Chain(current_server, next_server) +uri = daemon.register(obj) +ns = Pyro4.locateNS() +ns.register(servername, uri) + +# enter the service loop. + +print("server_%s diaktifkan " % current_server) +daemon.requestLoop() diff --git a/Chapter06/Pyro4/StudiKasus/SecondExample/server_chain_2.py b/Chapter06/Pyro4/StudiKasus/SecondExample/server_chain_2.py new file mode 100644 index 0000000..4632cc4 --- /dev/null +++ b/Chapter06/Pyro4/StudiKasus/SecondExample/server_chain_2.py @@ -0,0 +1,18 @@ +from __future__ import print_function +import Pyro4 +import chainTopology + +current_server = "2" +next_server = "3" + +servername = "example.chainTopology." + current_server + +daemon = Pyro4.core.Daemon() +obj = chainTopology.Chain(current_server,next_server) +uri = daemon.register(obj) +ns = Pyro4.locateNS() +ns.register(servername, uri) + +# enter the service loop. +print("server_%s diaktifkan " % current_server) +daemon.requestLoop() diff --git a/Chapter06/Pyro4/StudiKasus/SecondExample/server_chain_3.py b/Chapter06/Pyro4/StudiKasus/SecondExample/server_chain_3.py new file mode 100644 index 0000000..af8304b --- /dev/null +++ b/Chapter06/Pyro4/StudiKasus/SecondExample/server_chain_3.py @@ -0,0 +1,18 @@ +from __future__ import print_function +import Pyro4 +import chainTopology + +current_server = "3" +next_server = "1" + +servername = "example.chainTopology." + current_server + +daemon = Pyro4.core.Daemon() +obj = chainTopology.Chain(current_server, next_server) +uri = daemon.register(obj) +ns = Pyro4.locateNS() +ns.register(servername, uri) + +# enter the service loop. +print("server_%s diaktifkan " % current_server) +daemon.requestLoop() diff --git a/Chapter07/codes/how to containerize a Python application/dockerize.py b/Chapter07/codes/how to containerize a Python application/dockerize.py index d90b1c9..666159b 100644 --- a/Chapter07/codes/how to containerize a Python application/dockerize.py +++ b/Chapter07/codes/how to containerize a Python application/dockerize.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 -from flask import Flask +from flask import Flask, render_template app = Flask(__name__) @app.route("/") -def hello(): - return "Hello World!" +def home(): + return render_template('home.html') if __name__ == "__main__": app.run(host="0.0.0.0", port=int("5000"), debug=True) \ No newline at end of file diff --git a/Chapter07/codes/how to containerize a Python application/templates/home.html b/Chapter07/codes/how to containerize a Python application/templates/home.html new file mode 100644 index 0000000..7078f19 --- /dev/null +++ b/Chapter07/codes/how to containerize a Python application/templates/home.html @@ -0,0 +1,38 @@ + + +
+ +He di-de da-da da di de + Da-da di do-de da-re rei-ra + Obat hati ada lima perkaranya + Yang pertama, baca Qur'an dan maknanya + Yang kedua, sholat malam dirikanlah + Yang ketiga, berkumpullah dengan orang sholeh + Yang keempat, perbanyaklah berpuasa + Yang kelima, dzikir malam perpanjanglah + Salah satunya siapa bisa menjalani + Moga-moga Gusti Allah mencukupi + Obat hati ada lima perkaranya + Yang pertama, baca Qur'an dan maknanya + Yang kedua, sholat malam dirikanlah + Yang ketiga, berkumpullah dengan orang sholeh + Yang keempat, perbanyaklah berpuasa + Yang kelima, dzikir malam perpanjanglah + Salah satunya siapa bisa menjalani + Moga-moga Allah Ta'ala mencukupi + Moga-moga Allah Ta'ala mencukupi
+Test html flask docker
+