일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- dbeaver
- 아이온큐
- NORI
- redis
- Aggregation
- vavr
- Analyzer
- TSLA
- IONQ
- 테슬라
- API
- api cache
- 양자컴퓨터
- java crawler
- JPA
- Query
- Selenium
- Elastic
- Elasticsearch
- mysql
- elasticsearch cache
- ann
- Docker
- java
- file download
- aggs
- aqqle
- Cache
- request cache
- KNN
Archives
- Today
- Total
아빠는 개발자
[python] python 병렬처리 본문
728x90
반응형
파이썬에서는 여러 가지 방법을 사용하여 병렬 처리를 할 수 있습니다. 다음은 파이썬에서의 주요 병렬 처리 방법 몇 가지입니다.
threading 모듈:
- threading 모듈은 스레드를 사용하여 병렬 처리를 제공합니다. 그러나 GIL(Global Interpreter Lock) 때문에 CPU-bound 작업에는 제한적입니다. GIL로 인해 파이썬 인터프리터에서 동시에 실행되는 스레드 수가 제한되기 때문입니다.
import threading
def worker():
# Your code here
threads = []
for i in range(5):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
for t in threads:
t.join()
multiprocessing 모듈:
- multiprocessing 모듈은 프로세스를 사용하여 병렬 처리를 제공합니다. 각 프로세스는 독립적인 GIL을 가지기 때문에 CPU-bound 작업에서 유용합니다.
import multiprocessing
def worker():
# Your code here
processes = []
for i in range(5):
p = multiprocessing.Process(target=worker)
processes.append(p)
p.start()
for p in processes:
p.join()
concurrent.futures 모듈:
- concurrent.futures 모듈은 고수준의 인터페이스를 제공하여 스레드 또는 프로세스를 사용한 병렬 처리를 쉽게 할 수 있습니다.
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
def worker():
# Your code here
with ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(worker) for _ in range(5)]
# Wait for all tasks to complete
for future in futures:
result = future.result()
# 또는 ProcessPoolExecutor를 사용할 수도 있습니다.
asyncio와 async/await (비동기 프로그래밍):
- asyncio 모듈은 비동기 코드를 작성하고 실행할 수 있는 프레임워크를 제공합니다. 주로 I/O-bound 작업에서 사용되며, async/await 구문을 통해 비동기 코드를 작성할 수 있습니다.
import asyncio
async def worker():
# Your code here
async def main():
tasks = [worker() for _ in range(5)]
await asyncio.gather(*tasks)
asyncio.run(main())
선택한 방법은 작업의 종류와 특성에 따라 다를 수 있습니다. I/O-bound 작업이라면 asyncio를 사용하는 것이 좋을 수 있고, CPU-bound 작업이라면 multiprocessing을 고려해보는 것이 좋습니다.
작업 셈플
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
def process_doo(i):
print(i)
def worker():
for i in range(5):
result = process_doo(i);
with ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(worker) for _ in range(5)]
# Wait for all tasks to complete
for future in futures:
result = future.result()
728x90
반응형
'Python' 카테고리의 다른 글
[python] 날짜계산 (datetime) (1) | 2024.02.03 |
---|---|
[python] SQL 문 사용시 큰따옴표, 작은 따옴표 처리 (pymysql) (1) | 2023.12.30 |
[python] DB data to json (0) | 2023.09.03 |
[conda] conda 가상환경 설치 (1) | 2023.08.27 |