30 มีนาคม 2558

Published 3/30/2558 by with 0 comment

แนะนำ Multiprocessing ใน Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้จะพาผู้อ่านไปแนะนำการเขียนโปรแกรมโดยใช้ Multiprocessing ในภาษา Python กันครับ

ในงานบางงาน ต้องการการประมวลผลหลาย ๆ ในเวลาเดียวกัน หากเป็นการเขียนโปรแกรมตามปกติเราจะดำเนินงานได้แค่ครั้งละงานเดียวเท่านนั้น ทำให้เราต้องเขียนโปรแกรมโดยอาศัยการแยกโปรเซสของงานออกจากกัน เพื่อให้สามารถประมวลผลงานหลาย ๆ ในเวลาเดียวกัน ตัวอย่างโปรแกรมที่ใช้หลักการนี้มี โปรแกรมแชทต่าง ๆ และโปรแกรมดาวน์โหลดไฟล์ต่าง ๆ เป็นต้นครับ

ในการเขียนโปรแกรมภาษา Python เราสามารถทำงานนี้ได้โดยอาศัย Thread และแบ่งออกเป็น Threading และ Multithreading

อ่านเกี่ยวกับ Threading ได้ที่นี่ครับ

บทความนี้จะพูดถึงเรื่อง Multithreading เป็นการประมวลผลแบบขนาน โดยสามารถทำงานหลาย ๆ งานในเวลาเดียวกันได้ครับ แต่ต้องคำนึงถึงหน่วยความจำ การประมวลผล CPU และการเหลือพื้นที่หน่วยความจำ กับการคืนหน่วยความจำให้กับระบบปฏิบัติการด้วยนะครับ
ในการใช้งาน Multithreading ต้อง

[python]import multiprocessing[/python]

เข้ามาทุกครั้งครับ

ตัวอย่างใช้งาน Multiprocessing ใน Python



[python]
from multiprocessing import Process
def hi(name):
print('สวัสดีคุณ ', name)
return
if __name__=='__main__':
a1 = Process(target=hi, args=('บญช่วย',))
a2 = Process(target=hi, args=('สมศรี',))
a1.start()
a2.start()
a1.join()
a2.join()
[/python]

ผลลัพธ์
สวัสดีคุณ บญช่วย
สวัสดีคุณ สมศรี

จะเห็นได้ว่าโปรแกรมประมวลผลแบบขนานพร้อมกันทั้งสองคำสั่ง

อีกตัวอย่างหนึ่งครับ

[python]
from multiprocessing import Process

def run():
print('ทำงาน :D')
return

if __name__ == '__main__':
jobs = []
for i in range(5):
p = Process(target=run)
jobs.append(p)
p.start()
[/python]

ผลลัพธ์
ทำงาน :D
ทำงาน :D
ทำงาน :D
ทำงาน :D
ทำงาน :D

มีการลูปคำสั่ง 5 ครั้งในคำสั่ง for i in range(5): ครับ โดยตัวแปร p สั่งงานโดยประมวลผลแบบขนานโดยเรียกใช้ฟังก์ชั่น run และคำสั่ง p.start() เป็นการเริ่มต้นการประมวลผลแบบขนาน ส่วนตัวแปร jobs เป็นการเก็บค่าการทำงาน Process โดยสามารถดูได้โดยเพิ่มคำสั่ง print(jobs) ได้ โดยโค้ดจะเป็น

[python]
from multiprocessing import Process

def run():
print('ทำงาน :D')
return

if __name__ == '__main__':
jobs = []
for i in range(5):
p = Process(target=run)
jobs.append(p)
p.start()
print(jobs)
[/python]

ผลลัพธ์
[<Process(Process-1, started)>]
[<Process(Process-1, started)>, <Process(Process-2, started)>]
[<Process(Process-1, started)>, <Process(Process-2, started)>, <Process(Process-3, started)>]
[<Process(Process-1, started)>, <Process(Process-2, started)>, <Process(Process-3, started)>, <Process(Process-4, started)>]
[<Process(Process-1, started)>, <Process(Process-2, started)>, <Process(Process-3, started)>, <Process(Process-4, started)>, <Process(Process-5, started)>]
ทำงาน :D
ทำงาน :D
ทำงาน :D
ทำงาน :D
ทำงาน :D

อ่านรายละอียดเพิ่มเติมได้ที่ https://docs.python.org/3/library/multiprocessing.html

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)