Multiprocessing with Python

Punnaruck
Super AI Engineer
Published in
2 min readFeb 2, 2021

การทำงานแบบ Multiprocessing ในยุคปัจจุบันเป็นสิ่งที่หลีกเลี่ยงไม่ได้ ถ้าจะทำให้โปรแกรมที่เราเขียนมีประสิทธิภาพ และทำงานได้รวดเร็ว

ซึ่งหลายคนคงเคยเจอปัญหานี้เพราะว่าโดยปกติภาษาโปรแกรมที่ใช้จะจำกัดการประมวลผลไว้อยู่ เช่น python จะทำงานด้วย cpu 1 core ซึ่งโดยทั่วไปแล้ว CPU 1 ตัวจะมี cpu core ไม่ต่ำกว่า 4 แต่จะทำยังไงให้สามารถใช้งาน cpu core ได้หลายตัว ลองมาดูตัวอย่างกันครับ

ขั้นแรกลองตรวจสอบ cpu core ในเครื่องที่เราใช้ก่อนว่ามีกี่ core ด้วยคำสั่งด้านล่าง

import multiprocessing print(“Number of cpu : “, multiprocessing.cpu_count())
check cpu core

เมื่อเรารู้จำนวน CPU core ที่สามารถใช้งานได้แล้ว เราลองมาทดสอบกันดีกว่า เมื่อเราใช้ cpu หลาย core มันจะเร็วขึ้นจริงหรือไม่ โดยการใช้ for-loop ตามจำนวน cpu แล้วตั้ง delay 2 วินาทีก่อนเรียก function x2 ซึ่งจะให้ผลเท่ากับค่าที่ใส่เข้าไปคูณ 2 แล้วจับเวลาจนกว่าจะครบ loop จำนวน cpu

import time

def x2(x):
return x*2

cpu_cores = multiprocessing.cpu_count()
starttime = time.time()
for i in range(0,cpu_cores):
y = i*i
time.sleep(2)
print(‘{} * 2 = {}’.format(i, x2(y)))

print(‘That took {} seconds’.format(time.time() — starttime))

จากผลด้านบนจะเห็นว่าการทำงานทั้งหมดจะใช้เวลาประมาณ 32 วินาที ทีนี้ถ้าเป็นแบบ multiprocessing ละจะเร็วแค่ไหน

import time
import multiprocessing
def x2(x):
return x*2
def multiprocessing_func(x):
y = x*x
time.sleep(2)
print(‘{} * 2 = {}’.format(i, x2(y)))

if __name__ == ‘__main__’:
starttime = time.time()
processes = []
cpu_cores = multiprocessing.cpu_count()
for i in range(0,cpu_cores):
p = multiprocessing.Process(target=multiprocessing_func, args=(i,))
processes.append(p)
p.start()

for process in processes:
process.join()

print(‘That took {} seconds’.format(time.time() — starttime))

ผลที่ได้คือ จาก 32 วินาที เหลือแค่ 2 วินาทีในการรันโปรแกรม ซึ่งเร็วกว่าเดิมหลายเท่าตัว

หวังว่าบทความนี้จะเป็นประโยชน์ต่อเพื่อนๆ ไม่มากก็น้อยครับ

--

--