개요
집중과 건강을 효율적으로 챙기고자 생각난 프로그램.
요구사항
- 40분 ~ 1시간 정도 집중하여 작업
- 데스크탑 알림을 받아 잠시 휴식
환경
window11, python, pycharm
과정
claude를 이용해 해당 요구사항 전달.
코드 복사하여 실행시 아무 이벤트 없었음.
코드 읽어보다 보니 win10toast 라이브러리를 추천한게 이상해보임.
내 os 버전에 맞는 win11toast 서칭.
win10toast는 window10에서 사용가능한 라이브러리로 파악함.
from win11toast import toast
toast('Hello Python🐍')
알림창 잘 뜨는지 확인.
주기마다 알림이 잘 발생하는지 확인하기 위한 테스트 진행
// 1분동안 2초마다 알림 발생 테스트
import asyncio
from win11toast import toast
async def send_notifications():
toast('Hello Python🐍')
for _ in range(30): # 1분 동안 2초마다 알림 (60초 / 2초 = 30회)
toast("알림 제목", "이것은 2초마다 발생하는 알림입니다.")
await asyncio.sleep(2) # time.sleep 대신 asyncio.sleep 사용
# 비동기 루프 실행
asyncio.run(send_notifications())
toast 함수 내부를 타고 들어가보면 toast_async 비동기 함수를 호출하여, ayncio 이벤트 루프를 통해 실행됨.
따라서 2초 간격 텀을 주기위해 동기함수인 time.sleep() 대신 asyncio.sleep() 메소드를 사용하였고,
감싸고 있던 메소드도 async 키워드가 붙어 실행시 asyncio.run() 을 통해 실행함
2초는 너무 짧은거같아서 1시간동안 1분 주기로 변경하였고,
알림 가독성을 편하게 하기위해 현재 시간을 메시지 내용에 넣어봄.
import asyncio
from win11toast import toast
from datetime import datetime
async def send_notifications():
while True: # 반복적으로 알림을 발생
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
toast("제목-Alarm", f"지정한 40분마다 발생하는 알림입니다. 현재시각 = {current_time}")
# 40분 대기 (2400초)
await asyncio.sleep(2400)
# 비동기 루프 실행
asyncio.run(send_notifications())
40분후 알림 쌓인 기록 확인.
해당 개발까지 시간 종료.
정리하다보니 요구사항을 추가, 수정했더라면 좋았을거 같음.
* 예상 유저 시나리오
40분간 집중하며 작업하고싶음 -> 프로그램 실행 -> (40분후) 알림 발생 -> n분간 휴식 -> 책상에 착석 -> 다시 작업 시작시, 해당 시간 기준으로 40분간 집중 작업 -> 반복
Python aysncio 에 관한 좋은 글
참고
https://pypi.org/project/win11toast/
https://pypi.org/project/win10toast/
'취미' 카테고리의 다른 글
[1시간 개발] mac, 자동화 시스템 구축하기 (0) | 2024.09.11 |
---|---|
[IT이슈] 마이크로소프트(MS) 글로벌 사이버 대란 (1) | 2024.07.20 |
데스크탑 SSD 추가하기, 마이그레이션 3탄 (1) | 2024.02.29 |
데스크탑 SSD 추가하기, 마이그레이션 2탄 (0) | 2024.02.15 |
데스크탑 SSD 추가하기, 마이그레이션 1탄 (0) | 2024.02.13 |