Model Multithread
Teknik Multithread pada bahasa Python adalah teknik yang digunakan untuk
nenjalankan beberapa threads yang mirip dengan menjalankan beberapa program berbeda
secara bersamaan. Di mana manfaat menggunakan tetapi dengan manfaat berikut
• Beberapa utas dalam suatu proses berbagi ruang data yang sama dengan utas utama
dan karenanya dapat berbagi informasi atau berkomunikasi satu sama lain dengan
lebih mudah daripada jika mereka adalah proses yang terpisah.
• Utas terkadang disebut proses ringan dan tidak memerlukan banyak memori di atas
kepala; mereka lebih murah daripada proses.
Sebuah thread memiliki awal, urutan eksekusi, dan kesimpulan. Di dalam thread
memiliki pointer instruksi yang melacak di mana dalam sebuah konteksnya sedang berjalan
saat ini. Berikut poin-poinnya
• Thread dapat didahului (terganggu)
• Thread dapat ditunda sementara (juga dikenal sebagai sleeping) sementara utas lainnya
sedang berjalan – ini disebut yielding atau menghasilkan.
Untuk mulai membuat sebuah sebuah threading atau utas lain, Anda dapat
menggunakan metode berikut ini, perhatikan code berikut:
def print_cube(num):
# function to print cube of given num
print("Cube: {}" .format(num * num * num))
def print_square(num):
# function to print square of given num
print("Square: {}" .format(num * num))
if __name__ =="__main__":
# creating thread
t1 = threading.Thread(target=print_square, args=(10,))
t2 = threading.Thread(target=print_cube, args=(10,))
# starting thread 1
t1.start()
# starting thread 2
t2.start()
Output
Tugas Modul
Gabungkan aplikasi dibawah ini dengan modul sebelumnya.
Server.py
import socket
d =
{'1':('tomat',20000),'2':('kentang',10000),'3':('bawang',40000),'4':('wortel'
,10000),'5':('apel',45000)}
def Main():
host = socket.gethostbyname(socket.gethostname())
port = 5559
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
print('\nList Barang->')
for keys in d.keys():
name , cost = d[keys]
print('Keys->',keys,'item -> :',name,'\n','The cost is :',cost)
message = input('Masukan item yang anda butuhkan ->')
while True:
s.send(message.encode('ascii'))
data = s.recv(1024)
print('Recieved from the server :',str(data.decode('ascii')))
ans = input('\nYakin Ingin membeli ini? :')
if ans == 'y':
message = input('Masukan item yang anda butuhkan-> ->')
else:
break
s.close()
if __name__ == '__main__':
Main()
Client.py
import socket
from _thread import *
import threading
print_lock = threading.Lock()
d =
{'1':('tomat',20000),'2':('kentang',10000),'3':('bawang',40000),'4':('wortel'
,10000),'5':('apel',45000)}
def threaded(c):
while True:
print('\nList Barang->')
for keys in d.keys():
name , cost = d[keys]
print('Keys->',keys,'item -> :',name,'\n','The cost is :',cost)
data = c.recv(1024)
if not data:
print('Bye')
print_lock.release()
break
name , cost = d[str(data.decode('ascii'))]
print('Item selected-> :',name,'\n','Cost-> :',cost)
ans = input('\nDo you want to checkout->')
if ans =='y':
c.send(str.encode('\nYour bill is :'+str(cost)))
else:
print('Thank u')
c.close()
def Main():
host = socket.gethostbyname(socket.gethostname())
port = 5559
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(5)
print(f"Server aktif dengan IP {host} dan Port {port}")
while True:
c,addr = s.accept()
print_lock.acquire()
print('Connected to :',addr[0],':',addr[1])
start_new_thread(threaded,(c,))
s.close()
if __name__ == '__main__':
Main()