IT/Python3

비동기 처리 sample

클라우드 개발자 앙몬드 2021. 3. 18. 20:25
반응형

노드js에서나 보던 비동기 처리를, 파이썬에서도 보게 될 줄이야...

파일쓰기에서 비동기 처리가 필요하였기에 테스트성으로 개발한 용도입니다.

import boto3, json, pathlib, sys, asyncio, logging, itertools
from datetime import datetime
from aiofile import AIOFile, Reader, Writer, async_open

async def 내용을_생성하고_파일쓰기_호출하는_함수() :
	for i in range(10000) :
		한페이지 = []
		for j in range(10000) : 한페이지.append(str(i) + "\n")
		asyncio.create_task(파일쓰기함수(한페이지))
		#await asyncio.create_task(파일쓰기함수(한페이지))
	 
async def 파일쓰기함수(한페이지) :
	with open("temp2.txt", "a") as 파일 : 파일.writelines(한페이지)

async def 주황버섯의_함수() :
	print("시작!")
	시작시간 = datetime.now()
	await asyncio.create_task(내용을_생성하고_파일쓰기_호출하는_함수())
	끝난시간 = datetime.now()
	print(f"{시작시간} -> {끝난시간}")
	print(f"총 걸린시간 : {끝난시간 - 시작시간}")

def 핑크빈의_파일쓰기_검증함수() :
	print("검증몬 출동")
	검증결과 = { }
	with open("temp2.txt", "r") as 파일 :
		한줄 = 파일.readline()
		while 한줄 != "" :
			try : 
				검증결과[한줄] += 1
			except Exception as e :
				검증결과[한줄] = 1
			한줄 = 파일.readline()

	for k,v in 검증결과.items() : 
		if v != 10000 : print(f"{k} : {v}")
		#print(f"{k} : {v}")

if __name__ == "__main__" :

	#핑크빈의_파일쓰기_검증함수()
	#exit(0)

	물범의_이벤트루프 = asyncio.get_event_loop()
	물범의_이벤트루프.run_until_complete(주황버섯의_함수())
	물범의_이벤트루프.close()
반응형