วันพุธที่ 23 มกราคม พ.ศ. 2562

ทดสอบความแตกต่างของความเร็วการทำงานระหว่าง Multithreaded และ Multiprocessing

เนื่องด้วยต้องการทดสอบประสิทธิภาพในการประมวลผลระหว่าง Multithreaded และ Multiprocessing ของ Python เพื่อนำไปใช้ในการแก้ไขโค้ดของโปรเจ็ค โดยแบ่งการทดสอบออกเป็น 2 แบบ คือ

1. ฟังค์ชันที่ไม่มีการคำนวณใดๆเกิดขึ้น มีเพียง Delay ของเวลาเท่านั้น


2. ฟังค์ชันที่เพิ่มการคำนวณแบบวน Loop เข้ามาแต่ไม่มีการใช้ Delay

โดยทั้ง 2 ฟังค์ชันจะมีองค์ประกอบคือ ProcessID , Process Name และ Thread Name

แต่ละฟังค์ชันจะทดลอง 3 วิธีคือ

1. ทดลองแบบ Serial คือ เรียกใช้ฟังค์ชันโดยตรง
2. ทดลองแบบ Multithreaded คือ เรียกใช้ฟังค์ชันผ่านการใช้ threading Module
3. ทดลองแบบ Multiprocessing คือ เรียกใช้ฟังค์ชันผ่านการใช้ multiprocessing Module

โดยผลการทดลองที่ได้คือ



ในแบบการใช้ Delay อย่างเดียวจะพบว่า การรันแบบ Serial จะใช้เวลาที่ 4 วินาที ส่วนของ Multithreaded และ Multiprocessing นั้น เวลาในการทำงานลดลงไปกว่า 1/4 แต่ของ Multithreaded นั้นจะเร็วกว่าอยู่เล็กน้อย เนื่องจากการสลับ Process นั้นทำให้เกิด cost ในการทำงานที่สูงกว่า

 
ในแบบที่มีการคำนวณค่าร่วมด้วย จะพบว่าการรันแบบ Serial และแบบ Multithreaded นั้นมีเวลาการทำงานที่ใกล้เคียงกัน แต่ในทางกลับกัน Multiprocessing กลับทำงานได้เร็วกว่าเนื่องจากจริงๆแล้ว Multithreaded ใน Python นั้นไม่ใช่การทำงานแบบ Parallel อย่างแท้จริง แต่เป็นการทำงานไปทีละ thread สลับกันจนจบ ส่วนของ Multiprocessing แต่ละ process นั้นทำงานกันแบบ truly parallel ไม่ต้องมีการสลับลำดับการทำงาน แต่ทำไปพร้อมกันจนจบ

Reference : https://medium.com/@espressofx/parallel-%E0%B9%81%E0%B8%A5%E0%B8%B0-concurrent-programming-%E0%B8%82%E0%B8%AD%E0%B8%87-python-9a85f16803d6

วันอาทิตย์ที่ 13 มกราคม พ.ศ. 2562

ทดลองเพิ่ม Audio Player ลงใน Smart Mirror

ได้ทำการประยุกต์การสร้าง Audio Player ลงในไฟล์ Html ของ Smart Mirror โดยเพิ่มไปถัดจากหน้าแสดง Youtube ซึ่งผลที่ได้คือสามารถเล่นไฟล์ mp3 ที่ใส่เข้าไปได้ สามารถ pause , forward และ backward เพื่อเลือกเพลงที่ต้องการฟังได้ โดยหน้า Application เบื้องต้นมีลักษณะดังนี้

วันพุธที่ 9 มกราคม พ.ศ. 2562

การทดสอบการเพิ่ม Mouse Scroll ในฟังค์ชัน Keymap

จากการศึกษาข้อมูลการทำ Scrollbar ใน Html เพิ่มเติมกับการใช้ Mouse ที่เป็นคำสั่งจาก Pynput ไป mapping กับการเคลื่อนไหวมือขึ้นลง พบว่าสามารถทำได้จริง โดยทำการปรับปรุง 2 จุดคือ
  1. การปรับปรุงหน้า Section ของข่าวโดยเพิ่ม Scrollbar ไปใน Section นั้น



  2. ทำการเปลี่ยน Key mapping ในไฟล์ keymap_log.py จากเดิมที่การเลื่อนมือขึ้น-ลง จะเป็นการกดปุ่มขึ้นลง เป็นการ Scroll ลูกกลิ้งของ mouse ขึ้น-ลง แทน

วันจันทร์ที่ 7 มกราคม พ.ศ. 2562

Simulate Mouse Events

การจำลองเมาส์

from pynput.mouse import Button, Controller
mouse = Controller()

การตั้งตำแหน่งของเมาส์
    mouse.position = (posX, posY) 
    เมาส์จะเริ่มที่จุด (posX, posY)
การเลื่อนเมาส์
    mouse.move(posX, posY)
    เมาส์เลื่อนไปที่จุด (posX, posY)

การคลิ้กบนเมาส์
    mouse.click( mouseButton, click time)
        - mouseButton จะมี 3 แบบ คือ 
            1. Button.left
            2. Button.right
            3. Button.middle        
        - click time  เป็นจำนวนครั้งในการกด
 

การเลื่อนขึ้นลง
    mouse.scroll( LeftRight, UpDown)
        - LeftRight เป็นการเลื่อนซ้าย หรือ ขวา โดยถ้าหาจะเลื่อนไปทางซ้าย จะใช้เป็นจำนวนเต็มลบ แต่ถ้าหากจะเลื่อนไปทางขวา จะเป็นจำนวนเต็มบวก
        - UpDown เป็นการเลื่อนขึ้น หรือ ลง โดยถ้าต้องการเลื่อนขึ้น จะใช้เป็นจำนวนเต็มลบ แต่ถ้าหากจะเลื่อนลง จะใช้เป็นจำนวนเต็มบวก