참고 문헌
>> 처음 시작하는 파이썬
15장 포인트 : 한 컴퓨터에서 순차 및 동시 접근
## 프로그램과 프로세스
하나의 프로그램을 실행할 때 운영체제는 하나의 프로세스를 생성하는 데,
한 프로세스는 다른 프로세스로부터 독립된 존재다.
os
>> 모듈에서 시스템 정보를 접근하는 몇 가지 함수를 제공한다.
os.getuid()
>> 사용자 id
os.getgid()
>> 그룹id (프로세스 id)
os.getcwd()
>> 현재 작업 디렉터리
비동기 프로그래밍은
대기 시간을 낭비하지 않고
그 시간에 CPU가 다른 처리를 할 수 있도록 하는데
이를 흔히 non-blocking하다고 한다.
## 프로세스 생성하기 (1) : subprocess
>> subprocess 모듈로 존재하는 다른 프로그램을 시작하거나 멈출 수 있다.
import subprocess
ret=subprocess.getoutput('date')
ret
## 프로세스 생성하기(2) : multiprocessing
>> 프로그램의 전반적인 시간을 줄이기 위해 하나의 작업을 여러 프로세스에 할당할 수 있다.
multiprocessing 모듈은 프로세스 간의 상호통신과
모든 프로세스가 끝날 때까지 기다리는 큐작업을 포함한다.
## 프로세스 죽이기 : terminate()
>> 자세한 건 help(Process)
동기
: 부모 기러기 뒤에 새끼 기러기가 한 줄로 지어다니는 것처럼, 한 작업은 다른 작업을 따른다.
비동기
: 연못에서 거위들이 여기 저기 돌아다니는 것 처럼 작업은 독립적이다.
일반적으로 큐는 메세지를 전달한다.
분산 작업 관리를 위한 큐는 작업큐 (job queue, task queue)라고 한다.
I/O 바운드 문제 시 스레드 사용하기
CPU 바운드 문제 시 프로세스, 네트워킹, 이벤트 사용하기
## asyncio
async 및 await 문을 사용해서 비동기 코드를 정의한다.
RuntimeError: asyncio.run() cannot be called from a running event loop
> 오류
asyncio.run(wicked())은 python 3.7이후 버전에서 사용해야 한다.
주피터 노트북에서 사용중일땐
await wicked() 이라고 입력해야 한다.
====================================
## 코드 실행시간 체크하기 (timeit 모듈)
timeit(stmt='pass', setup='pass', timer=<built-in function perf_counter>, number=1000000, globals=None)
stmt : 실행 측정할 코드나 함수
setup : stmt를 실행하기 위해 사전에 필요한 코드나 함수를 선언
timer= Timer 인스턴스
number = 선언한 stmt의 수행 횟수
globals : 코드를 실행할 이름 공간을 지정한다.
globals()를 globals 매개 변수로 전달해서 현재 전역 이름 공간에서 코드가 실행되도록 하는 것
>> globals()는 내장함수로 글로벌 심볼 테이블을 딕셔너리 형태로 돌려준다.
이것은 항상 현재 모듈의 딕셔너리이다.
docs.python.org/ko/3.6/library/functions.html#globals
timeit(함수명,number=함수호출수)
ex) timeit(hello,number=1)
동기식 코드와 비동기식 코드는 공존할 수 있다. 동일한 프로그램 내에
def앞에 async를 입력하고 비동기 함수가 호출되기 전에 await을 입력한다.
asyncio.sleep(2) 호출 자체는 코루틴으로,
API 호출처럼 시간이 많이 걸리는 곳에서 사용한다.
asyncio 웹 크롤러 코드
www.aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html
'여니의 프로그래밍 study > 파이썬' 카테고리의 다른 글
[파이썬] 리스트 내 딕셔너리 key 이용해서 value(값) 추출하기 (0) | 2021.01.19 |
---|---|
[파이썬] print 출력 시 줄바꿈(엔터) 제거하고 한 줄에 출력하기 (0) | 2021.01.19 |
[파이썬] 텔레그램 봇 만들고 메세지 보내기 (0) | 2021.01.13 |
[파이썬 셀레니옴] 자동 로그인 구현하기 (0) | 2021.01.12 |
아나콘다 네비게이션에서 셀레니움(selenium) 다운로드 (0) | 2021.01.12 |