ในงานบางงาน ต้องการการประมวลผลหลาย ๆ ในเวลาเดียวกัน หากเป็นการเขียนโปรแกรมตามปกติเราจะดำเนินงานได้แค่ครั้งละงานเดียวเท่านนั้น ทำให้เราต้องเขียนโปรแกรมโดยอาศัยการแยกโปรเซสของงานออกจากกัน เพื่อให้สามารถประมวลผลงานหลาย ๆ ในเวลาเดียวกัน ตัวอย่างโปรแกรมที่ใช้หลักการนี้มี โปรแกรมแชทต่าง ๆ และโปรแกรมดาวน์โหลดไฟล์ต่าง ๆ เป็นต้นครับ
ในการเขียนโปรแกรมภาษา Python เราสามารถทำงานนี้ได้โดยอาศัย Thread และแบ่งออกเป็น Threading และ Multithreading
อ่านเกี่ยวกับ Threading ได้ที่นี่ครับ
บทความนี้จะพูดถึงเรื่อง Multithreading เป็นการประมวลผลแบบขนาน โดยสามารถทำงานหลาย ๆ งานในเวลาเดียวกันได้ครับ แต่ต้องคำนึงถึงหน่วยความจำ การประมวลผล CPU และการเหลือพื้นที่หน่วยความจำ กับการคืนหน่วยความจำให้กับระบบปฏิบัติการด้วยนะครับ
ในการใช้งาน Multithreading ต้อง
import multiprocessing
เข้ามาทุกครั้งครับ
ตัวอย่างใช้งาน Multiprocessing ใน 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()
ผลลัพธ์
สวัสดีคุณ บญช่วย
สวัสดีคุณ สมศรี
จะเห็นได้ว่าโปรแกรมประมวลผลแบบขนานพร้อมกันทั้งสองคำสั่ง
อีกตัวอย่างหนึ่งครับ
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()
ผลลัพธ์
ทำงาน :D
ทำงาน :D
ทำงาน :D
ทำงาน :D
ทำงาน :D
มีการลูปคำสั่ง 5 ครั้งในคำสั่ง for i in range(5): ครับ โดยตัวแปร p สั่งงานโดยประมวลผลแบบขนานโดยเรียกใช้ฟังก์ชั่น run และคำสั่ง p.start() เป็นการเริ่มต้นการประมวลผลแบบขนาน ส่วนตัวแปร jobs เป็นการเก็บค่าการทำงาน Process โดยสามารถดูได้โดยเพิ่มคำสั่ง print(jobs) ได้ โดยโค้ดจะเป็น
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)
ผลลัพธ์
[<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 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)