본문 바로가기

Python

[Python] 동시성(Concurrency), 병렬성(Parallelism)

동시성(Concurrency) 프로그래밍

- 동시에 실행되는 것처럼 보이는 것

- Thread 여러 개를 번갈아 가면서 실행

- Multi-threading

import threading
import time

# thread에서 실행할 함수
def work():
	print("[sub] start")
    keyword = input("[sub] 검색어를 입력하세요 >>>")
    print(f"[sub] {keyword}로 검색을 시작합니다.")
    print("[sub] end")
    
# mainthread 실행
print("[main] start")

worker = threading.Thread(target=work)
# daemon을 사용하면 mainthread가 종료될 때 subthread도 같이 종료됨
worker.daemon = True
worker.start()

print("[main] mainthread는 자기 할일을 합니다.")
print("[main] end")

 

병렬성(Parallelism) 프로그래밍

- 실제로 작업이 동시에 실행되는 것

- 프로세스를 여러 개 만들어서 동시에 실행

- Multi-processing

import multiprocessing as mp

# process에서 실행할 함수
def sub_process(name):
	print("[sub] start")
    	print(name)
        cp = mp.current_process()
        print(f"[sub] pid : {cp.pid}")
    	print("[sub] end")
    
# main process
if __main__ == "__main__":  					# main module 일 때에만 실행하라는 의미
	print("[main] start")
    	p = mp.Process(target=sub_process, args=('startcoding',)  # target: 객체, args: 가변인자(tuple 형태)
    	p.start()
        cp = mp.current_process()
        print(f"[main] pid : {cp.pid}")
    	print("[main] end")

 

from multiprocessing import Process
import time

class Subprocess(Process):
	
    def __init__(self, name):
    	Process.__init__(self)
        self.name = name
        
    def run(self):
    	print(f"[sub] {self.name} start")
        time.sleep(5)
        print(f"[sub] {self.name} end")
        
if __name__ == "__main__":
	print("[main] start")
    p = Subprocess(name='startcoding')
    p.start()
    time.sleep(1)
    print(p.is_alive())     		# process가 살아있는지 검삭
    p.join()       			# join -> sub process가 끝난 후에 main process가 끝나도록 설정
    print("[main] end")

 

참고

패스트 캠퍼스 강의 (한 번에 끝내는 파이썬 웹 개발 초격자 패키지)

'Python' 카테고리의 다른 글

[Python] csv 파일 쓰기, 읽기  (0) 2024.01.29
[Python] pickle 파일 작성 및 읽기  (0) 2024.01.29