Languages & Frameworks/Python
[python] asyncio
[python] asyncio
2017.08.27파이썬의 코루틴과 태스크 API파이썬의 이벤트 루프 API asyncio실행 흐름```pythonimport asyncio async def sub(n): await asyncio.sleep(n) print("sub{}".format(n)) async def comain(): times = [1, 2, 2] fts = [asyncio.ensure_future(sub(t)) for t in times] for f in asyncio.as_completed(fts): x = await f print("comain") loop = asyncio.get_event_loop()loop.run_until_complete(comain()) # comain()이 Future로 wrapping되며 Task schedul..
[python] ( coroutine / Task )와 비동기 모듈
[python] ( coroutine / Task )와 비동기 모듈
2017.08.25coroutine 코루틴이란 ? 각 루틴이 종속적인 관계 아닌(caller, callee 관계인 subroutine이 아닌) 대등한 관계로, 서로를 순차적으로 호출하도록 되어 있는 함수 ~3.4 에서는 제너레이터를 사용해 코루틴을 구현 제너레이터는 어디까지 실행했는지를 기억했다가 나중에 다시 그 부분부터 실행되기 때문에, 이를 Future와 결합하면 코루틴을 구현하기 용이 ```python # next(c) 한 번 호출 시 다음 yield까지 실행. # 즉 아래 함수는 next(c)를 3번 호출 가능 def coro(): # 밑줄 부분을 실행("yield1" 반환)하고 첫 번째 멈춤. 즉 hello = ???는 아직 실행 전. hello = yield "yield1" yield hello # hello를..
[python] threading, multiprocessing, GIL, concurrent.futures.ThreadPoolExecutor
[python] threading, multiprocessing, GIL, concurrent.futures.ThreadPoolExecutor
2017.08.25threading ( multiprocess ) 직접 `` threading.Thread`` 클래스의 객체를 생성하는 방법 `` threading.Thread``를 상속받은 다음 이 클래스의 객체를 생성하는 방법 (한 가지 방법이 더 있지만 어차피 안쓴다) #1 import threading def say(msg): for i in range(2): time.sleep(1) print(msg) for msg in ['THREAD1', 'THREAD2', 'THREAD3']: t = threading.Thread(target=say, args=(msg, )) # recv() 같은 blocking 함수를 호출하는 thread는 flag를 False로 만든다고 해도 # 애초에 recv()에서 넘어가질 않기 때..
[python] plotly
[python] plotly
2017.07.19Plotly? Python, JS, R을 지원하는 오픈소스 차트 라이브러리. https://plot.ly/python/user-guide/ https://plot.ly/python/reference/ https://plot.ly/python/line-charts/ https://plot.ly/python/network-graphs/ https://plot.ly/python/configuration-options/ DiGraph에서 방향 표현하기 Plotly-python, Dash, Plotly-js Plotly-python은 파이썬에서 그래프를 구성하고 파일 기반으로 그래프를 생성해준다. 그래서 그래프 이외에 select box를 붙인 다던가, 이 select box의 동작이 그래프에 영향을 미친다던가 ..
[python] graph visualization
[python] graph visualization
2017.07.19graphnetworkx anaconda에 포함되어 있음. 사용법도 간단하지만 룩이 구리고 pure-python implementation이라 속도가 굉장히 느리다.graphviz 논문에 나올법한 상당히 구식 룩이나 쓰기 편함. 활용도가 높음. 사용하기 위해서는 graphviz라는 프로그램 자체와 이를 python과 연결해주는 라이브러리 둘 다 설치해야 한다. * graphviz 설치하고 bin폴더 환경변수에 등록해주어야 함. 라이브러리로는 ``py graphviz, pygraphviz, graphviz-python``이 있는데 그냥 ``py graphviz``가 제일 무난하고 대중적인 듯. 그리고 이거 사용할 때 아주 주의해야 할 것이 ``py ":"``가 node나 edge에 들어가 있으면 그 앞까지..
[python] subprocess, Popen
[python] subprocess, Popen
2017.07.03Note )subprocess로 실행하는 바이너리가 출력→입력대기 순서로 진행할 때,``c read() -> write()``를 주었는데도 제대로 동작하지 않는 경우가 있다.이는 실행하는 바이너리 자체에서 입력 대기 하기 전에 출력을 파이썬으로 보내주어야 하는데, 입력 대기가 끝난 이후에 파이썬으로 출력 내용을 보내기 때문에 발생하는 현상으로 보인다. 그래서, 파이썬 단에서는 파이프를 새로 만들든 무슨 짓을 하든 해결이 안되고, 바이너리에서 flush해주는 수 밖에 없는 듯. Popen세부적인 제어는 `` subprocess.Popen()``을 사용해야 한다.stdio 연결```python>>> p = subprocess.Popen(argv, stdin=subprocess.PIPE, stdout=subp..
[python] with / try-except
[python] with / try-except
2017.07.02with 파일 open, read는 이런식으로 사용한다. ```python with open("foo.txt", "w") as f: while True: line = f.readline() if not line: break print(line) ``` auto close를 위해 with를 사용하는게 좋다. with를 빠져나오면서 자동으로 close한다. 파일에서 데이터를 읽어오는데 read(), readline(), readlines() 함수를 지원한다. readlines()는 각 라인을 리스트로 반환한다. 대신 try - finally로 finally에서 `` close()``를 호출해 주는 방법도 괜찮다. 간단한 open은 with로, 다른 메소드를 호출해야 하는 등의 나머지 경우는 finally로 ..
[python] directory parse / glob / pathlib
[python] directory parse / glob / pathlib
2017.07.02```pythonos.getcwd() # working directory == python command를 실행한 pathos.path.dirname(os.path.abspath(__file__)) # 현재 파일이 위치한 directory```디렉토리의 파일을 얻는 방법은 ``py os.listdir()``과 ``py glob.glob()`` 두 가지가 있다.3.4 부터 ``py pathlib``이라는 고수준 파일 시스템 모듈이 있으니 이걸 쓰는게 좋다.```pythonfrom pathlib import Pathp = Path('.')attack_packages = [x.resolve() for x in p.iterdir() if x.is_dir()]a.suffix # asdf.py이면 .py 반환a.s..
[python] 람다(lambda), 함수형 fileter / map / reduce
[python] 람다(lambda), 함수형 fileter / map / reduce
2017.07.02아무래도, 파이썬에서는 filter, map, reduce 보단 list comprehension을 사용하는게 더 pythonic하다는 의견이 주류인 것 같다. https://www.artima.com/weblogs/viewpost.jsp?thread=98196 [python] Comprehension, Generator / iterator VS iterable / itertools lambda ```python lambda args : returns ``` 람다식은 `` filter, map, eval``같은 larger expression에 끼워서(inline) 사용하는 경우 가독성을 높여준다. 복잡한 상황에서는 명확한 ``py def``를 사용하는 편이 가독성이 더 좋다. 그리고 이런 식으로 람다식..
[python] Comprehension, Generator / iterator VS iterable / itertools
[python] Comprehension, Generator / iterator VS iterable / itertools
2017.07.02List Comprehension확실히 일반 for문 보다 속도 우위가 있다. [python] 프로파일링(profiling)reduce 사용한 코드와 비교해서 더 깔끔한 것으로 선택하면 될 듯. map filter도 마찬가지보통 reduce를 사용해야 하는 경우라면 list comprehension이 더 깔끔한 경우가 많기는 하다.순서가 보장된다. https://stackoverflow.com/questions/1286167/is-the-order-of-results-coming-from-a-list-comprehension-guaranteed `` result``를 `` a`` 리스트의 요소들 중 짝수인 요소들만 골라 `` *3`` 한 값들로 채우려면```pythonresult = [num * 3 fo..
[python] binary data와 16진수 / struct.pack
[python] binary data와 16진수 / struct.pack
2017.05.09binary datahex, bin```pythonhex = 0xf1bin = 0b11110001``` unicode / bytes 변환 int to ascii문자열을 bytes로 형변환 하고 싶다면 이 방법이 제일 간단하기는 하다. ```pythona = b'string to byte'```b'\x80' 으로 직접 지정하면 \x80 이상 data도 입력할 수 있다.```pythonhex(ord('a')) #unicode -> bytechr(0x61) #byte -> unicode```ord는 설명으로는 ASCII 변환이라고 써있기는 하지만 `` \x81``같은 데이터를 넘겨도 잘 동작한다. struct.packbinary data를 little endian으로 정렬할 때는 struct module을 사..
[python] 출력 관련 : 문자열, str <> bytes, bytearray
[python] 출력 관련 : 문자열, str <> bytes, bytearray
2017.05.09str과 bytes-like object문자열을 bytes로 만들고 싶다면 이 방법이 제일 간단하기는 하다.```pythona = b'string to byte'```b'\x80' 으로 직접 지정하면 \x80 이상 data도 입력할 수 있다. 파이썬에서 str형은 유니코드를 의미한다. 그래서 ASCII 문자열/바이트 문자열(bytes-like object)을 사용하는 부분에서 문제가 발생하곤 한다. 문자열을 byte 형식으로 변환하고 싶다면 인코딩 해야 한다. str→ → → → encode() → → → → ASCII← ← ← ← decode() ← ← ← ← ```python>>> a = 'string to byte'>>> a.encode()b'string to byte'````` encode()``..