본문 바로가기

Python/고급

(18)
[Python] Multiprocessing(5) - Queue, Pipe 프로세스 통신 - Queue 방식 from multiprocessing import Process, Queue, current_process import time import os # 실행 함수 def worker(id, baseNum, q): process_id = os.getpid() process_name = current_process().name print(f"Process ID: {process_id}, Process Name: {process_name}") # 누적 sub_total = 0 # 계산 for i in range(baseNum): sub_total += 1 # time.sleep(0.1) # Produce q.put(sub_total) # 정보 출력 print(f"*** Sub ..
[Python] Multiprocessing(4) - Sharing state 멀티 프로세스 자원공유(Value 방식) 샘플 코드 # 프로세스 동기화(공유) # 값을 하나만 공유할때-Value, 리스트타입으로 공유할때-Array from multiprocessing import Process, current_process, Value, Array import random import os # 프로세스 메모리 공유 예제(공유 O) # 프로세스 동기화 관련 참고 # https://docs.python.org/3/library/multiprocessing.html#synchronization-between-processes # 실행 함수 def generate_update_number(v : int): with v.get_lock(): # lock 을 이용한 자료 공유 for i in ..
[Python] Multiprocessing(3) - ProcessPoolExecutor ProcessPoolExecutor 을 이용한 샘플 코드 - 여러 사이트 크롤링 샘플 코드 from concurrent.futures import ProcessPoolExecutor, as_completed import urllib.request # 조회 URLS, url 이 정상동작 안하면 오류 발생 URLS = [ 'https://www.daum.net/', 'http://www.cnn.com/', 'https://naver.com/', 'http://www.bbc.co.uk/', 'http://ruliweb.com' ] # 실행 함수 def load_url(url, timeout): with urllib.request.urlopen(url, timeout=timeout) as conn: return..
[Python] Multiprocessing(2) - Naming, Parallel processing 멀티 프로세스를 그룹으로 실행하는 샘플코드 from multiprocessing import Process, current_process import os import random import time # 실행 방법 def square(n): # 랜덤 sleep time.sleep(random.randint(1, 3)) process_id = os.getpid() process_name = current_process().name # 제곱 result = n * n # 정보 출력 print(f">> Process Name: {process_name}, Process ID: {process_id}") print(f"*** Result of {n} square : {result}") if __name__ =..
[Python] Multiprocessing(1) - Join, is_alive 프로세스 생성방법 - 기초 from multiprocessing import Process import time import logging # 프로세스 실행 함수 def proc_func(name): # 프로세스에서는 로깅 방법을 각각 설정해야 함. # Logging format 설정 format = "%(asctime)s: %(message)s" logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S") logging.info("Sub-Process {}: starting".format(name)) logging.info("Sub-Process {}: starting".format(name)) time.sleep(3) loggi..
[Python] Thread(5) - Producer and Consumer Using Queue 큐를 이용한 생산자 소비자 구조의 스레드 import concurrent.futures import logging import queue import random import threading import time # 생산자 def producer(queue, event): ''' 네트워크 대기 상태라 가정(서버) ''' while not event.is_set(): message = random.randint(1,101) logging.info('Producer got message: {}'.format(message)) queue.put(message) logging.info('Producer received event Exiting') # 소비자 def consumer(queue, event): '..
[Python] Thread(4) - Lock, Unlock 공유자원을 Lock & unLock 하는 2가지 방식에 대한 정리. import logging from concurrent.futures import ThreadPoolExecutor import time import threading class FakeDataStore: # 공유 변수(value) def __init__(self): # 스택영역 self.value = 0 self._lock = threading.Lock() # 변수 업데이트 함수 def update(self, n): logging.info('Thread ***{}: starting update'.format(n)) # 뮤텍스 & Lock 등 동기화(Thraed synchronization 필요) # Lock 획득 / 방법1 self._..
[Python] Thread(3) - ThreadPoolExecutor import logging from concurrent.futures import ThreadPoolExecutor import time def task(name, n): logging.info('***Sub-Thread %s: starting', name) result = 0 for i in range(n): result += i logging.info('***Sub-Thread %s: finished result: %d', name, result) return result def main(): # Logging format 설정 format = "%(asctime)s: %(message)s" logging.basicConfig(format=format, level=logging.INFO, datefm..