Processor

【라즈베리파이】 wiringPi Python : 멀티스레드(Multi thread)

작성자 임베디드코리아 작성일26-03-02 20:56 조회9회 댓글0건
◆ 멀티스레드(Multi thread) 는 각각의 프로세스가 독립된 메모리를 가지고 동작한다.
◆ Thread의 의미는 실이며, 쓰레드(Thread)는 하나의 프로세스 내에서 여러개의 실들이 각각 움직이게 된다.
◆ 실(Thread)은 내부의 메모리를 공유하면서 각각 움직이므로 프로그램이 가벼워 진다.

■ Thread의 특징
   메모리 공유
   독립된 register 사용
   독립된 stack 사용


■ 파이썬 멀티스레드(Multi thread) 선언
   Thread 선언은 threading의 Thread로 한다.
   Thread의 시작은 start으로 종료는 join으로 한다.
   target은 thread에서 동작시킬 함수 값을 결정하고, args는 입력값을 의미 한다.

--->>>  예제 :  Thread.py  <<<-----------------------------
import threading
import time
 
def func0(list_var):
    for x in list_var:
        print(x)
        time.sleep(0.5) 
 
def func1(list_var):
    for x in list_var:
        print(x)
        time.sleep(1) 
 
if __name__ == "__main__":
    t1 = threading.Thread(target=func0, args=([1,2,3],))
    t2 = threading.Thread(target=func1, args=(["a","b","c"],))
 
    t1.start()
    t2.start()
 
    t1.join()
    t2.join()
-----------------------------------------------------------------------
[결과>>

1
a
2
3b

c


■ 파이썬 멀티스레드(Multi thread) : 이름, 프로세스 명 확인
   current_thread.name 함수를 사용해서 현재 thread의 이름과 os.getpid 함수로 현재 process 명을 확인한다.
   멀티 프로세스와 다르게 멀티스레드는 동일한 프로세스를 사용하므로 결과는 다른 thread 이름을 가지면서
    동일한 process 명을 가진다.

◆ threading.current_thread(): 현재 스레드 값 확인
◆ os.getpid(): 현재 프로세스값 확인

--->>>  예제  :  Multi_thread.py    <<<--------------------------------
import threading
import os
 
def func0():
    print("func0 Thread Name : ", threading.current_thread().name)
    print("func0 Process ID : ", os.getpid())
 
def func1():
    print("func1 Thread Name : ", threading.current_thread().name)
    print("func1 Process ID : ", os.getpid())
 
if __name__ == "__main__":
 
    print("Main Thread Name : ", threading.current_thread().name)
    print("Main Process ID : ", os.getpid()) 

    t0 = threading.Thread(target=func0, name='t0')
    t1 = threading.Thread(target=func1, name='t1') 
 
    t0.start()
    t1.start()
 
    t0.join()
    t1.join(
---------------------------------------------------------------------------------------
[결과>>

Main Thread Name :  MainThread
Main Process ID :  15140
func0 Thread Name : t0
func0 Process ID :  15140
func1 Thread Name : t1
func1 Process ID :  15140

>> process ID는 동일하고 thread는 각각 다른 이름을 가지며.
    thread가 동시 진행되기 때문에 실행을 할때마다 순서가 다르게 나올 수 있다.