Multiprocessing with Python
การทำงานแบบ Multiprocessing ในยุคปัจจุบันเป็นสิ่งที่หลีกเลี่ยงไม่ได้ ถ้าจะทำให้โปรแกรมที่เราเขียนมีประสิทธิภาพ และทำงานได้รวดเร็ว
ซึ่งหลายคนคงเคยเจอปัญหานี้เพราะว่าโดยปกติภาษาโปรแกรมที่ใช้จะจำกัดการประมวลผลไว้อยู่ เช่น python จะทำงานด้วย cpu 1 core ซึ่งโดยทั่วไปแล้ว CPU 1 ตัวจะมี cpu core ไม่ต่ำกว่า 4 แต่จะทำยังไงให้สามารถใช้งาน cpu core ได้หลายตัว ลองมาดูตัวอย่างกันครับ
ขั้นแรกลองตรวจสอบ cpu core ในเครื่องที่เราใช้ก่อนว่ามีกี่ core ด้วยคำสั่งด้านล่าง
import multiprocessing print(“Number of cpu : “, multiprocessing.cpu_count())
เมื่อเรารู้จำนวน 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 multiprocessingdef x2(x):
return x*2def 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 วินาทีในการรันโปรแกรม ซึ่งเร็วกว่าเดิมหลายเท่าตัว
หวังว่าบทความนี้จะเป็นประโยชน์ต่อเพื่อนๆ ไม่มากก็น้อยครับ