Skip to content

แนะนำ Multiprocessing ใน Python

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

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

ในการเขียนโปรแกรมภาษา 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()

ผลลัพธ์
ทำงาน 😀
ทำงาน 😀
ทำงาน 😀
ทำงาน 😀
ทำงาน 😀

มีการลูปคำสั่ง 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)>]
ทำงาน 😀
ทำงาน 😀
ทำงาน 😀
ทำงาน 😀
ทำงาน 😀

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

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

Published on Categories ไม่มีหมวดหมู่

About wannaphong

วรรณพงษ์ ภัททิยไพบูลย์ ผู้ดูแลเว็บ wannaphong.com และผู้เขียนบทความบล็อกนี้ นักศึกษาชั้นปีที่ 1 สาขาวิทยาการคอมพิวเตอร์และสารสนเทศ คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น วิทยาเขตหนองคาย

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *