Python 다중 처리 자습서 : 다중 처리 모듈을 사용하여 병렬로 코드 실행
파이썬 3.6 버전 이전에 사용한 방식으로 보이는데 참고하면 좋을 것 같습니다.
https://www.youtube.com/watch?v=fKl2JW_qrso
# 파일명: async_api.py
# 실행 환경: cmd shell
# python async_api.py
import requests
import asyncio
import time
import multiprocessing
import concurrent
COUNT = 10
def ping_local(sec):
print('start...')
time.sleep(sec)
return('192.168.1.1') # FAKE request...
if __name__ == '__main__':
start = time.perf_counter()
with concurrent.futures.ProcessPoolExecutor() as executor:
secs = [i for i in range(COUNT, 0, -1)]
results = executor.map(ping_local, secs)
for r in results:
print(r)
finish = time.perf_counter()
print(f'걸린 시간: {round(finish-start, 2)} 초')
'''
with concurrent.futures.ProcessPoolExecutor() as executor:
secs = [i for i in range(COUNT, 0, -1)]
results = [executor.submit(ping_local, secs[sec]) for sec in range(COUNT)]
for f in concurrent.futures.as_completed(results):
print(f.result())
'''
'''
processes = []
for _ in range(COUNT): # 0.15초
p = multiprocessing.Process(target=ping_local, args=[0.15])
p.start()
processes.append(p)
for p in processes:
p.join()
#-------------------------------
'''
'''
#-------------------------------
import asyncio
import time
async def find_users_async(n):
for i in range(1, n + 1):
print(f'{n}명 중 {i}번 째 사용자 조회 중 ...')
await asyncio.sleep(1) # 비동기 함수에서 사용하는 sleep()
print(f'> 총 {n} 명 사용자 비동기 조회 완료!')
async def process_async():
start = time.time()
await asyncio.wait([
find_users_async(3),
find_users_async(2),
find_users_async(1),
])
end = time.time()
print(f'>>> 비동기 처리 총 소요 시간: {end - start}')
if __name__ == '__main__':
asyncio.run(process_async())
'''
'Python 활용' 카테고리의 다른 글
파이썬, 스케줄 기능 처리 (0) | 2022.01.18 |
---|---|
파이썬, 명령 실행 함수를 subprocess 모듈로 교체하기 (0) | 2022.01.13 |
파이썬, uwsgi 옵션 --master 이용 (0) | 2021.12.29 |
파이썬, 스레드 구조 time.sleep() 이용하기 (0) | 2021.12.18 |
파이썬, 오라클 timeout 설정 테스트 (0) | 2021.12.14 |