일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Spring
- VOA
- 쿠버네티스
- DataGridView
- Python
- Kotlin
- 파이썬
- Winform
- Java
- mybatis
- 도커
- c#
- springboot
- 리액트
- 코틀린
- react
- 자바
- github
- docker
- 마이바티스
- 스프링
- machine-learning
- MySQL
- AWS
- kubernetes
- design pattern
- 스프링부트
- Spring Boot
- git
- 리팩토링
Archives
- Today
- Total
보뇨 다이어리
동시성 구현 본문
반응형
코드로만 작성해보고 하다보니 코드로 설명!
자바스크립트에서는 Promise 라는게 있어서 잘만 사용했는데 파이썬은 어떻게..? 라는 생각이 들어서 찾아봤다
생각보다 사용방법은 간단했고 사실 같기도하다..
필요한 부분만 주석으로 설명을 넣었다!
import time
import threading
from concurrent.futures import Future
import asyncio
def network_request(number):
time.sleep(1.0)
return {"success": True, "result": number ** 2}
def fetch_square(number):
response = network_request(number)
if response["success"]:
print("Result is {}".format(response["result"]))
def wait_and_print(msg):
time.sleep(1.0)
print(msg)
# threading 블로킹없이 대기 가능
def wait_and_print_async(msg):
def callback():
print(msg)
timer = threading.Timer(1.0, callback)
timer.start()
# 콜백 함수를 받도록 수정
def network_request_async(number, on_done):
def timer_done():
on_done({"success": True, "result": number ** 2})
timer = threading.Timer(1.0, timer_done)
timer.start()
# Future 비동기 호출의 결과를 추적하는데 사용할수있는 패턴
# set_result 를 하면 Future.result 할때 값이 나오게 되고
# add_done_callback 를 통해 콜백 추가 가능
def test_future():
fut = Future()
fut.add_done_callback(lambda future: print(future.result(), flush=True))
fut.set_result("Hello")
# 기본적으로 사용되는 프레임워크인 asyncio
def test_asyncio():
loop = asyncio.get_event_loop()
def asyncio_callback():
print("Hello, asyncio")
loop.stop()
loop.call_later(1.0, asyncio_callback)
loop.run_forever()
# asyncio 에 있는 async, await 을 통해 간단하게 구현 가능
async def wait_and_print_async_await():
await asyncio.sleep(1)
print("Message: Good!")
if __name__ == '__main__':
network_request_async(1, lambda value: print(value))
network_request_async(2, lambda value: print(value))
test_future()
test_asyncio()
loop = asyncio.get_event_loop()
loop.run_until_complete(wait_and_print_async_await())
반응형
'컴퓨터 관련 > Python 정보' 카테고리의 다른 글
순수 파이썬 최적화 (1) | 2021.03.01 |
---|---|
벤치마킹과 프로파일링 (0) | 2021.03.01 |
join 메소드에 Tuple 사용하기 (0) | 2019.10.17 |
SyntaxError: Non-ASCII character '\xec' in file 에러 (0) | 2019.06.24 |
pip install mysqlclient 윈도우 설치시 오류 (0) | 2019.02.12 |