[L2H] – Threading in Python for Parallelism

Threading ဆိုတာ ဘာလဲ ဆိုတာကို theory အရေသခ်ာသိခ်င္ရင္ေတာ့ Operation System အေၾကာင္းကို ဖတ္ဖို႕လိုပါလိမ့္မယ္။ က်ေနာ္ကေတာ့ Brief အေနနဲ႕ ဖတ္ထားပါတယ္။ Think OS ဆိုတဲ့စာအုပ္ေလး ကိုသက္ခိုင္ Facebook မွာ တင္ထားတာေတြ႕ခဲ့ပါတယ္။ သူ႕မွာက ဘာေကာင္းလဲဆိုရင္ example program ေလးေတြပါတယ္။ တခ်ိဳ႕ဟာေတြ စာဖတ္လို႕နားမလည္ေပမဲ့ program ကို run လိုက္တဲ့အခါ နားလည္သြားတတ္ပါတယ္။ တျခားစာအုပ္ၾကီးေတြလဲရွိပါတယ္။ လံုးဝ စာေတြခ်ည္းပဲဆိုလဲ ဖတ္ရမွာပ်င္းသြားတာမ်ိဳး English စာအားနည္းတာပဲျဖစ္ျဖစ္ ၊ ကိုယ္တိုင္က OS ေလာက္ထိ Develop လုပ္မယ္လဲစိတ္မကူးထားဘူး ၊ နားလည္ယံုပဲျဖစ္ျဖစ္ အဲ့စာအုပ္ေလးကေတာ့ အကူညီေပးနိုင္ပါလိမ့္မယ္။

Threading Module

2.7

https://docs.python.org/2/library/threading.html

3

https://docs.python.org/3/library/threading.html

ဒီေတာ့ ဒါကို ဘာလုိ႕ Security ပိုင္းနဲ႕ပတ္သတ္တဲ့ blog တစ္ခုကေရးတာလဲဆိုရင္ေတာ့ ေအာက္ကအခ်က္ေလးေတြ ကိုၾကည့္ပါ

1.အျပိုင္အလုပ္လုပ္ဖို႕လိုလာတဲ့အခါ threading သံုးရတယ္ဆိုတာ Basic networking in python မွာ ေတြ႕ခဲ့ျပီးျဖစ္ပါတယ္။

2.Port scanning လုပ္မယ္ဆိုပါေတာ့၊ port 1 ကေန 65536 ထိဆိုရင္ ၆ ေသာင္းေက်ာ္ထိရွိပါတယ္၊ က်ေနာ္တို႕တစ္ခုခ်င္း scan မလား ? ၁၀ ခု သို႕မဟုတ္ ၁၅ ခုေလာက္ျပိုင္တည္း scan မလား

3.အျခား Brute force လုပ္တဲ့ေနရာေတြမွာလဲ ၊ performance ေကာင္းဖို႕အတြက္ သံုးလို႕ရပါတယ္။

4.က်ေနာ္မသိေသးတဲ့ အျခားအသံုးဝင္တဲ့အရာေတြလဲရွိနိုင္ပါတယ္။

Thread ၂ ခု Create လုပ္လိုက္မယ္

import threading

def t1():
	print "I m first thread"

def t2():
	print "I m second thread"

t1_obj=threading.Thread(target=t1)
t2_obj=threading.Thread(target=t2)

t1_obj.start()
t2_obj.start()

Run ၾကည့္

Documentation ထဲမွာေတာ့စံုပါတယ္။

လက္ရွိ thread ေတြကိုျပခ်င္ရင္ active_count() ကို သံုလို႕ရတယ္။ ဒါဆိုစမ္းၾကည့္မယ္

print ("\nNumber of Active Thread = %d")%(threading.active_count())

Result

Thread ဆိုတာတကယ္ေတာ့ Process နဲ႕မတူဘူးဆိုတာကိုသိထားရပါမယ္။ ဒါကဒီလိုစမ္းၾကည့္ရင္ရတယ္

import threading
import os

def t1():
	print "I m first thread t1\n"
	print ("Process id of t1 = %d\n")%(os.getpid())

def t2():
	print "I m second thread t2\n"
	print ("Process id of t2 = %d\n")%(os.getpid())

t1_obj=threading.Thread(target=t1)
t2_obj=threading.Thread(target=t2)

print ("Process id of this program = %d")%(os.getpid())
t1_obj.start()
t2_obj.start()	

Result

Ok ဒီေတာ့ လိုရင္းကိုသြားမယ္ print ေလးပဲထုတ္ၾကည့္မယ္။ ဒါေပမဲ့ thread ၂ ခုေဆာက္လိုက္မယ္။

import threading
import os

def mylist():
	for i in range(0,100):
		print("%d")%i

threads=2

jobs=[]

for i in range(0,threads):
	thread=threading.Thread(target=mylist)
	jobs.append(thread)

for j in jobs:
	j.start()

for j in jobs:
	j.join()

print "Complete"

Result

ပထမ thread ကို အရင္စလုပ္တာကိုေတြ႕ရမယ္။ 0 ေနာက္တစ္ခုကစျပီးေတာ့ thread ၂ ခုတစ္ျပိဳင္တည္းစျပီးလုပ္သြားတာကိုေတြ႕ရမွာျဖစ္ပါတယ္။

ဒီလိုဆိုရင္ Thread ေတြမ်ားလာတဲ့အတြက္ ပိုျမန္လာမွာလားဆိုရင္ေတာ့ တစ္ခုျပီးမွတစ္ခုလုပ္တာထက္စာရင္ေတာ့ျမန္ပါတယ္။

ေအာက္ကလို program execution time ေလးထုတ္ၾကည့္လိုက္မယ္။

import threading
import os
import time

start_time=time.time()

def mylist():
	for i in range(0,100):
		print("%d")%i

threads=1

jobs=[]

for i in range(0,threads):
	thread=threading.Thread(target=mylist)
	jobs.append(thread)

for j in jobs:
	j.start()

for j in jobs:
	j.join()


execution_time=(time.time()-start_time)
print("Complete in %s seconds")%execution_time		

Result

ဒီလိုဆိုရင္ Threading ထက္ Multiprocessing ကပိုျမန္တာလားဆိုတာေမးစရာျဖစ္လာတာေပါ့ ။

Threading Vs Multiprocessing from Medium

အဲ့ဒီက result အရဆိုရင္ေတာ့ multiprocessing က ပိုျမန္တယ္ဆိုတာေတြ႕ရတယ္။ ဒီေတာ့ က်ေနာ္တို႕ Multiprocessing အေၾကာင္းကို ေနာက္ထပ္ post တစ္ခုမွာေလ့လာၾကာတာေပါ့

Multi thread ကိုသံုးျပီး Bruteforce တိုက္တဲ့ example ေလး အျဖစ္ေအာက္က Link မွာ demo ၾကည့္နိုင္ပါတယ္။

Multi-Threaded Bruteforcer from netsec 

https://netsec.ws/?p=420

Thanks 😀

1 Trackback / Pingback

  1. [L2H] – Multi Processing in Python – Legion of LOL

Comments are closed.