Python 9

Python GIL (Global interpreter lock)

한 줄로 요약하자면 파이썬 인터프리터를 동시에 사용하지 못하도록 만드는 것. 자바에도 그렇듯 파이썬에도 가비지 컬렉터(Garbage Collector)가 있다. 이 가비지 컬렉터는 참조하지 않는 객체들을 메모리에서 제거하는 역할을 하는데 문제는 멀티스레드의 경우, 그것을 카운팅하는 것이 쉽지 않다는 것이다. 전문 용어로 경쟁 상태(Race Condition)로 동시 참조문제로 인해 이 카운팅이 꼬일 수가 있다. 그렇다고 이것을 해결하기 위해 모든 객체에다가 뮤텍스 같은 잠금장치를 걸어놓고 한 사람에 한 명씩 들어오세용~ 하다간 성능 저하 + 개발자의 폭발적인 실수가 예상될 듯 뻔하다. 아 참 그리고 파이썬 인터프린터는 프로세스 당 하나씩 있으므로 한 순간에 프로세스 안에 한 스레드를 실행시켜줄 수 있다...

Python 2023.07.10

loop argument must agree with lock 해결 방법

2021년 12월 29일자 기준 Python version : 3.10.0 Django Channels 튜토리얼 진행하다가 아주 킹받는 상황을 맞이했다. 파트 2에서 redis 연동 및 테스트 진행하는데 Python 쉘에서 아래와 같은 redis 테스트 진행하다가 >>> async_to_sync(channel_layer.send)('test_channel', {'type': 'hello'}) 아래와 같은 에러를 토해냈다. ... self._cond = asyncio.Condition(lock=Lock()) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/locks.py", line 234, in __init__..

Python/Django 2023.07.10

Python을 이용한 Slack API 사용해보기 (단순 메시지 삭제 기능 구현)

1:1 대화 방에 있는 자신의 대화 삭제 방법 1. 접속 후 로그인 https://api.slack.com/ 2. 사이트 이동 https://api.slack.com/apps 3. 앱 생성 (1) 'Create an App' 클릭 (2) 'From scratch' 클릭 (3) 입력 필드 입력 후 'Create App' 클릭 - App name : 원하는 이름으로 지정 - Pick a workspace to develop your app in: 리스트에 나오는 Workspace 중 하나 선택 4. 프로젝트가 만들어지면 오른쪽 목차에 'OAuth & Permissions' 클릭 5. 해당 페이지 내의 Scopes 단락으로 이동 6. Bot, User 중 원하는 기능에서의 Scope(권한 범위)를 지정 - 이..

Python 2023.07.10

actions/create-release@v1 사용 시, Resource not accessible by integration 해결방법

Github action 사용하면서 Release 자동 생성 step을 넣어줬었는데 Resource not accessible by integration 에러가 났었다. 아래와 같이 create-release 공식 예제 소스를 넣었는데도 에러가 났다. - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: Release ${{ github.ref }} body: | Changes in this Release - First Change - Second Change..

Python/Deploy 2023.07.10

Django + Channels (Redis) + Gunicorn + Uvicorn + Nginx 채팅 개발 시, 참고할 사항

Django + Channels + Gunicorn + Uvicorn + Nginx 조합으로 채팅 기능 배포 시, 아래 디지털 오션 문서를 참고했었는데 https://www.digitalocean.com/community/tutorials/how-to-set-up-an-asgi-django-app-with-postgres-nginx-and-uvicorn-on-ubuntu-20-04 그대로 따라해도 채팅 기능이 동작하지 않았다. 여러 삽질 끝에 패키치 재설치 및 설정값을 추가로 줘야 작동하는 것을 확인하였다. 1. Nginx 설정 웹소켓 도메인 처리 location /ws/ { proxy_pass [ 도메인 또는 Sock EX: http://unix:/run/gunicorn.sock ]; proxy_htt..

Python/Django 2023.07.10

Ubuntu 22.04 Nginx HTTPS 적용

$ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository universe $ sudo apt-get update $ sudo apt-get install certbot python3-certbot-nginx $ sudo certbot --nginx -d 사이트 주소 입력 # sudo certbot --nginx -d example.com # sudo certbot --nginx -d blog.example.com Certbox Process 첫 번째 내용 : 각종 보안 이슈 사항 등 정보 제공 - 관리자 이메일 주소 입력 두 번째 내용 : 이용 동의 관련 동의 선택 - 동의 세 번째 내용..

Python/Deploy 2023.07.10