SK shieldus Rookies 16기

[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(7일차)

Challenge programmers 2023. 10. 31. 20:24

 

오늘 학습 주제

1. 시간 관리

2. 작업 예약

3. 프로그램 실행

4. 마우스와 키보드 제어하기(pyautogui)

 

 

 

 

시간 관리


- Time -

시간과 관련된 기능을 제공하는 모듈

시간 측정, 딜레이, 시간 형식 변환 등에 사용

코드 설명
time() 현재 시각을 1970년 1월 1일 0시 0분 0초를 기준으로 초(sec) 단위로 지난 시간을 리턴(float타입)할 때 사용
ctime() time()으로 리턴된 시간을 읽기 쉬운 문자열로 가공할 때 사용
sleep() 지정한 초(sec)만큼 프로그램 일시 중지할 때 사용
datetime() 보기 좋은 포맷으로 시간을 리턴할 때 사용
timedelta() 시간의 차이를 계산할 때 사용

 

time()으로 시작 시간과 끝나는 시간을 체크해서 calcProd()의 연산에 걸린 시간 확인
ctime()으로 time()에서 출력되는 시간을 문자열로 리턴해 보기 좋게 한다
sleep()으로 지정된 시간만큼 프로그램을 일시 중지
dateime()을 이용하여 지정된 날짜를 보기 편한 포맷으로 출력

timedelta로 지정한 날짜의 차이를 출력

 

 

 

 

작업 예약


 

지정된 날짜까지 프로그램 중지
strftime() 로 보기 좋은 포맷으로 변경

 

 

 

 

프로그램 실행


비동기화

- 프로세스(Process) -

운영체제에서 어떤 실행 프로그램이 실행된다는 것은 CPU, 메모리와 같은 컴퓨터 자원을 사용

운영체제는 프로그램들이 실행될 수 있는 공간인 프로세스를 제공

실행 중인 프로그램 = 프로세스

   프로그램의 명령어와 데이터가 메모리에 올라가 있는 상태

 

 

- 프로세서(Processor) -

프로세스를 실행하는 주체로 중앙 처리 장치(CPU)라고 한다

일을 처리할 프로세스를 얼마나 실행시킬지 계획을 하는 스케줄링을 한다

 

 

- 스레드(Thread) -

프로세스의 실행 단위

프로세스는 최소 하나 이상의 스레드를 가지고 있다

프로세스가 받은 자원을 제어를 담당

한 개의 CPU 안에서 진행되는 작업은 Process라고 하며, 하나의 Process는 여러 개의 Thread를 가질 수 있다

 

 

- 병렬 처리(Multi Threading) -

여러 개의 프로세서(processor)를 통해 하나 또는 그이상의 프로그램 처리하는 방식 

여러 개의 스레드가 하나의 데이터 자원을 공유한다

메모리에 대한 효율성을 가진다

처리 부하를 분담하기에 처리 속도의 향상을 가져온다

 

《 Multithreading : I/O intensive tasks 》

하나의 포로세스에 여러 스레드로 자원을 공유하여 작업을 나누어 수행하는 것

CPU의 사용은 낮지만, I/O 사용이 많은 경우

 

 

《 Multiprocessing : CPU intensive tasks 》

두 개 이상의 프로세서(CPU)가 협력하여 하나 이상의 작업(Task)을 동시에 처리하는 것

CPU 사용이 높고, 계산량이 많은 경우

Cost가 높다 

기기의 코어 수 만큼만 병렬처리가 가능하다

Multithreading은 Multiprocessing보다 작은 메모리 공간을 차지하지만 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 수 있다  Multiprocessing은 하나의 프로세스에 장애가 생기더라도 다른 프로세스에 영향을 주지 않아 안정성이 좋지만 Multithreading보다 많은 메모리 공간과 CPU시간을 차지한다

 

 

- threading -

스레드 실행을 하기 위해 사용하는 라이브러리

파이썬은 기본적으로 단일 스레드에서 실행이 된다

코드를 병렬로 실행하기 위해서는 별도의 스레드를 생성해야 하는데

이 때 사용하는 라이브러리이다

코드 설명
Thread() 단일 실행 스레드를 만들 때 사용
start() 스레드를 시작할 때 사용

 

스레드로 take_a_nap 함수를 실행
스레드는 파라미터를 전달하면서 실행이 가능하다

 

- multiprocessing -

멀티프로세스를 활용하여 2가지 이상의 일을 동시에 실행하게 해주는 라이브러리

코드 설명
process() 멀티프로세스 생성할 때 사용
start() 프로세스를 시작할 때 사용

멀티프로세스를 이용하여 동작 시간을 단축할 수 있다

 

- subprocess -

현재 실행되고 있는 프로세스 안에서 다른 프로세스를 시작하거나 데이터를 주고 받는 라이브러리

프로세스의 입/출력 및 에러 결과에 대한 리턴을 직접 제어할 수 있다

Popen 클래스를 이용하면 프로세스 간의 데이터 통신이 가능하다

코드 설명
Popen() 서브프로세스 생성과 관리를 할 때 사용
poll() 서브프로세스의 종료를 확인할 때 사용

popen()을 이용하여 기본 프로그램인 계산기와 메모장을 실행

 

 

마우스와 키보드 제어하기(pyautogui)


- pyautogui -

마우스와 키보드 제어를 도와주는 라이브러리

코드 설명
size() 현재 사용하고 있는 모니터의 크기를 출력할 때 사용
position() 마우스의 현재 위치를 출력할 때 사용
moveTo(Location) 마우스를 지정한 Location으로 이동시킬 때 사용
click() 마우스 클릭을 실행시킬 때 사용
doubleClick() 마우스 더블클릭을 실행시킬 때 사용
dragTo(Location) 지정한 Location으로 마우스를 드래그할 때 사용
write(Contents) 지정한 Contents를 타이핑할 때 사용
press(Key) 지정한 Key를 입력할 때 사용
ketDown(Key) 지정한 Key를 누른 상태로 유지시킬 때 사용
keyUp(Key) 지정한 Key 누른 상태를 해제할 때 사용
hotkey(Key, Key) 여러 Key를 동시에 입력해야 할 때 사용
alert(text, title, button) 간단한 메세지 박스를 표시할 때 사용 버튼을 누르면 버튼의 value가 리턴
confirm(text, title, buttons) OK와 Cancel 버튼이 있는 메세지 박스를 표시할 때 사용 클릭한 버튼의 value를 리턴
prompt(text, title, default) 입력창이 있는 메세지 박스를 표시할 때 사용 입력한 내용을 리턴
password() [ * ]로 마스킹된 입력창을 표시할 때 사용
mouseInfo() 마우스의 정보를 확인하는 창을 사용할 때 사용
screenshot() 전체 화면을 스크린샷으로 찍고 이미지 객체로 리턴할 때 사용
getActiveaWindow() 현재 활성화된 창의 정보 확인할 때 사용

 

click()은 좌우 지정과 횟수를 설정이 가능하다
pyautogui로 키보드를 조작할 수 있다
pyautogui로 메세지창들을 호출할 수 있다
mouseInfo() 실행시 나오는 창으로 각종 정보들을 확인할 수 있다
스크린샷과 현재 활성화된 화면의 정보를 확인

 

 

 

 

참고

https://ctkim.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-time-%EB%AA%A8%EB%93%88

https://wikidocs.net/85581

https://wikidocs.net/82581#google_vignette

https://velog.io/@jaebig/python-%EB%8F%99%EC%8B%9C%EC%84%B1-%EA%B4%80%EB%A6%AC-1-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4Process%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9CThread

https://hhj6212.github.io/programming/python/2021/04/18/python-multi.html