[python] flask-socketio에서 버퍼링 없이 데이터 보내기
·
언어/python
서버에서 프로그램을 실행시켜 실행되는 프로그램이 출력하는 문장을 클라이언트에게 전송하는 기능을 구현중이었다. 클라이언트와 연결되면 특정 프로그램을 실행시키고 해당 프로그램이 출력문을 뱉을 때 마다 send()함수를 이용하여 클라이언트로 출력문을 송신하도록 했다. 즉, 한 이벤트 핸들러 안에서 반복문을 이용하여 매 반복마다 데이터를 송신하도록 했다. @socketio.on('connect') def connect_event(): p = redirect_test.run_file('./root/redirect.py') while p.poll() == None: out = p.stdout.readline() socketio.send({"data":out},json=True) 그러나 매 루프마다 데이터가 보내지지..
[python] 줄바꿈을 기준으로 문자열 분리하기
·
언어/python
파이썬에서 split() 함수를 이용하여 줄바꿈을 할 수 있지만 splitlines() 함수를 이용하여 문자열을 분리하는 방법에 대해 알아보았다. 함수 원형 str.splitlines(keepends=False) keepends(bool) True값이 주어지면 리스트에 줄바꿈 기호를 포함한다. 설명 split()과 마찬가지로 문자열을 구분자를 기준으로 분리해 리스트를 반환한다. 이때 splitlines() 함수는 이 구분자를 universal newlines로 사용한다. universal newlines는 파이썬에서 줄바꿈으로 인식하는 문자로 아래와 같다. 표현 설명 \n 줄바꿈 \r 캐리지 리턴 \r\n 캐리지 리턴 + 줄바꿈 \v 또는 \x0b 수직 탭 \f 또는 \x0c 폼 피드 \x1c 파일 구분..
[YOLOv7] custom training
·
AI
colab 환경 0. 설치 import sys import torch print(f"Python version: {sys.version}, {sys.version_info} ") print(f"Pytorch version: {torch.__version__} ") !nvidia-smi !# Download YOLOv7 code !git clone %cd yolov7 !ls !pip install -r requirements.txt 1. 데이터 분리 train, val 파일 생성 각각의 폴더 내부에 images, labels 폴더 생성 각각 이미지와 라벨링 된 텍스트 파일을 넣는다. 이때 이미지와 텍스트 파일의 이름이 같아야 한다. 2. 데이터 옮기기 나눈 데이터를 압축하여 yolov7/data 폴더로 옮..
[활성화 함수] SiLU(Swish)
·
AI
SiLU(Swish)란 sigmoid에 입력값을 한 번 더 곱해주는 모양이다. 연구에서 활성화 함수를 ReLU로 사용한 모델에서 단순히 SiLU로 바꾼 실험에서 SiLU가 ReLU를 압도한다고 한다. 그 이유는 정확하진 않지만 아래 4가지로 추측하고 있다. Unbounded above where x≥0 Bounded below where x
[MYSQL] Workbench Error Code: 1175: You are using safe update mode...
·
언어/MySQL
MySQL Workbench에서 where을 사용하지 않고 넓은 범위의 데이터를 수정, 삭제하려고 할 경우 아래와 같은 에러가 발생한다. Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 아래 쿼리문으로 안전모드를 해제할 수 있다. SET SQL_SAFE_UPDATES = 0; 다시 안전모드를 사용하려면 아래 쿼리문을 사용하면 된다. SET SQL_SAFE_UPDATES = 1;
[순환]백준9095: 1,2,3 더하기
·
알고리즘/문제풀이
Baekjoon: 9095문제 바로가기 경우의 수를 먼저 구했다. 3일 경우 4일 경우 코드 #include int cnt = 0; int plus(int n, int g); int main() { int Case = 0; scanf(" %d", &Case); for (int i = 0; i g) { return 0; } else if (n == g) { cnt++; return 0; } else { for (int i = 1; i < 4; i++) { plus(n ..
[python] OSError: [Errno 98] Address already in use
·
언어/python
socket은 소켓을 닫은 후 바로 재사용할 수 없도록 TIME_WAIT라는 상태를 가진다. setsockopt 함수를 사용하여 socket의 옵션을 변경할 수 있는데 SO_REUSEADDR 옵션을 1로 변경하면 기존 TIME_WAIT 상태를 버리고 새로운 소켓 요청을 할당할 수 있다. sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 이제 1초에 1번씩 소켓을 재사용해도 에러가 발생되지 않는다.
스택
·
알고리즘/개념
스택은 후입선출(LIFO)으로 창고에 쌓여있는 상자를 생각하면 이해가 쉽다. 만약 상자를 바닥에 A, B, C, D순으로 쌓았다면 하나를 꺼내려면 맨 위에 있는 D 상자를 꺼내야 한다. 스택에서 입출력은 맨 위에서만 일어나고 스택의 중간에서는 데이터를 삭제할 수 없다. 스택에서 입출력이 이루어지는 부분을 스택 상단(stack top)이라고 하고 반대쪽인 바닥부분을 스택 하단(stack bottom)이라고 한다. 스택에 저장되는 것을 요소(element)라 부른다. 스택에 요소가 하나도 없는 스택을 공백 스택(empty stack)이라고 한다. 스택 ADT 객체: 0개 이상의 원소를 가지는 유한 선형 리스트 연산: create(size) ::= 최대 크기가 size인 공백 스택을 생성한다. is_full(..
순환
·
알고리즘/개념
어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다. 팩토리얼 문제를 풀며 순환에 대해 알아본다. 팩토리얼 n!을 다음과 같이 정의하는데 다시 (n-1)!이 사용된다. 이러한 정의를 순환적이라고 한다. 위의 정의에 따라 n!을 구하는 함수인 factorial(n)을 만든다. int factorial(int n) { if (n
알고리즘과 자료구조
·
알고리즘/개념
자료구조 프로그램에서 자료들을 정리하여 보관하는 여러 가지 구조를 자료구조라고 한다. 알고리즘 주어진 문제를 처리하는 단계적인 절차를 알고리즘이라고 한다. 추상 자료형(ADT) 자료들과 그 자료들에 대한 연산들을 명시한 것이다. 자료 구조는 다음과 같은 ADT 형태로 구현하면 된다. 사용자가 ADT가 제공하는 연산만을 사용할 수 있다. 사용자는 ADT가 제공하는 연산들을 사용하는 방법을 알아야 한다. 사용자는 ADT 내부의 데이터를 접근, 수정할 수 없다. 사용자는 ADT가 어떻게 구현되는지 모르더라도 ADT를 사용할 수 있다. 다른 사람이 ADT의 구현을 변경하여도 인터페이스가 변경되지 않으면 사용자는 같은 방식으로 ADT를 사용할 수 있다. 객체지향언어는 클래스 개념을 사용하여 ADT가 구현된다. 알..