KKimj / smartwheelchair

MIT License
2 stars 0 forks source link

multiprocessing #10

Open KKimj opened 3 years ago

KKimj commented 3 years ago
  1. Motor speed를 어떻게 공유할지
  2. Motor speed 수정을 위해서 multiprocessing.Lock을 사용해야 할지

multiprocessing으로 분기할 요소는 다음과 같다.

  1. 입력 처리 (wasd : 전진, 좌우회전, 정지, 후진 요청)
  2. 거리센서 처리 ( 장애물이 있으면 정지 요청 )
  3. 모터 제어 요청 처리
KKimj commented 3 years ago

구현할 순서는 다음과 같다.

  1. multiprocessing 기본잡기
    • 3개의 함수로 분기 되는지 확인
    • 분기 후 잘 join되는지 확인
  2. 요구 사항 달성하기
    • 입력 처리 확인
    • 거리센서 값 처리 확인
    • 모터 제어 요청 확인 및 처리
  3. 세부 구현 완료하기
    • 동시성 제어가 확실한지 검증
    • 디버깅
KKimj commented 3 years ago
import multiprocessing
import os
import time
import signal

speed = 10

def input_handler():
    # x = input('입력')
    try:
        while True:
            x = input('입력')
            print('결과', x)
            time.sleep(1)
    except KeyboardInterrupt:
        return

def sonic_handler():
    try:
        while True:
            x = [1,2,3]
            print('sonic', x)
            time.sleep(1)
    except KeyboardInterrupt:
        return

def motor_handler():
    try:
        while True:
            global speed
            speed+= 10
            print('motor', speed)
            time.sleep(1)
    except KeyboardInterrupt:
        return

def multiprocess():
    procs = []

    proc = multiprocessing.Process(target = sonic_handler, args=[])
    procs.append(proc)

    proc = multiprocessing.Process(target = motor_handler, args=[])
    procs.append(proc)

    try:
        for proc in procs:
            proc.start()
        input_handler()
    except KeyboardInterrupt:

        for proc in procs:
            # proc.join()
            os.kill(proc.pid, signal.SIGTERM)
        print('end..')

if __name__ == '__main__':
    multiprocess()
KKimj commented 3 years ago

input handling library : https://pypi.org/project/inputs/

KKimj commented 3 years ago

https://stackoverflow.com/questions/32027233/how-to-multithread-multiprocess-just-one-instance-of-a-particular-function-in-py