Computer_Language/Python 5

[Python] 멀티 스레드 소켓 서버 구축하기

내가 한 번도 경험하지 못했던 "멀티 스레드 서버 프로그래밍"을 시작하기에 앞서 뼈대가 될 코드를 만들었다. 서버 코드 import socket import argparse import threading import time host = "127.0.0.1" port = 4000 def handle_client(client_socket, addr): print("접속한 클라이언트의 주소 입니다. : ", addr) user = client_socket.recv(1024) string = "안녕하세요? %s 님"%user.decode() client_socket.sendall(string.encode()) print("1초 후 클라이언트가 종료됩니다.") time.sleep(1) client_socket...

[Python] 파이썬 소켓 서버 프로그래밍

나는 개발자가 되기에 아직 많이 부족하다는 것을 느끼고 조금 더 열심히 살기로 다짐했다. 오늘은 파이썬으로 에코 서버를 TCP타입 소켓 통신을 통해 만들었다. 코드와 함께 간단한 주석으로 설명을 대체할 것이다. 사실 진짜 만들고 싶었던 건 내가 계속되는 질문에도 답을 못 했었던 스레드를 이용한 서버이다. 이번 건 맛 보기라는 뜻이다! 서버 코드 import socket host = "127.0.0.1" port = 9123 #IPv4 체계, TCP 타입 소켓 객체를 생성 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #포트를 사용 중 일때 에러를 해결하기 위한 구문 server_socket.setsockopt(socket.SOL_SO..

[Python] 파이썬 eval 과 exec 함수에 대하여

오늘은 편리하면서 위험한 함수인 eval과 exec함수에 대해서 정리해보려고 한다. 두 함수 모두 파이썬 내장 함수이며, 아마 파이썬 언어를 공부하면서 지나가다 한 번쯤 봤을 수도 있다. 왜 편리하면서 위험한지 공부해보자. eval 함수 eval 함수는 실행 가능한 문자열을 매개변수로 입력받아 문자열 자체를 실행한 결과값을 리턴해준다. 설명을 잘 못하니 직접 실행시켜보자. >>>> print(eval("5+5")) 10 파이썬 해석기에서 바로 실행한 결과이다. 문자열 "5+5"를 연산 5+5로 해석한 뒤 결과값으로 정수 10을 반환하는 것을 볼 수 있다. 얼핏 보면 정말 편리한 기능을 가진 함수지만, 남용하면 시스템에 큰 오류를 일으킬 수도 있다. 아래 코드를 실행시켜보자. string2 = ''' a+..

[Python] 파이썬 리스트와 튜플의 차이

파이썬으로 코딩을 하다 보면 튜플(tuple)과 리스트(list)를 혼합해서 사용하곤 했다. 두 클래스에 공통적으로 적용되는 연산들이 많아서 더 혼용했던 것 같다. 오늘은 짧지만 간단하게 두 자료형의 차이점을 알아보려고 한다. 튜플 vs 리스트 실험 두 자료형 모두 정수형이나 문자열 같은 자료형에 상관없이 요소를 가질 수 있고, 둘 다 인덱스 연산자로 접근이 가능하다. 또한 두 자료형 모두 반복문에 사용할 수 있다. list_d = [1,'2',3,'4'] tuple_d = ('1',2,'3',4) print(list_d[0]) print(tuple_d[1]) for i in list_d: print(i) for i in tuple_d: print(i) 나는 두 자료형의 차이점을 append 함수를 사용..

[Python] 파이썬 병렬 프로그래밍 모듈 (Multiprocessing 라이브러리)

졸업작품에 Multiprocessing 라이브러리를 사용할 부분이 생겨서 다시 공부할 겸 정리를 해보려고 한다. Multiprocessing 라이브러리를 공부하기 전 프로세스와 스레드의 개념을 정리하고 공부를 진행하겠다. 프로세스 vs 스레드 운영체제 공부를 하면서 프로세스의 정의는 "실행 중인 프로그램"이라고 했던 기억이 난다. 각 프로세스는 프로세스의 상태를 기록하는 프로세스 제어 블록(PCB - Process Control Block)이 존재하는데, 프로세스가 프로세서에 할당될 때마다 해당 프로세스의 제어 블록들이 먼저 적재된다. 이 과정을 문맥 교환(Context Switch)라고 한다. 스레드의 정의는 "프로그램 내에서 실행되는 흐름의 단위"이다. 한 개의 프로그램을 여러 개의 스레드로 정의할 ..