본문 바로가기

python

(56)
웹 서버 구축 - CGIHTTPRequestHandler, get, post py 즉 파이썬 파일은 java의 서블릿과 비슷한 역할이라고 볼 수 있다. httpserver2 # 웹 서버 구축 from http.server import CGIHTTPRequestHandler, HTTPServer # CGIHTTPRequestHandler : 동적으로 웹서버를 운영 가능 # CGI : 웹서버와 외부 프로그램 사이에서 정보를 주고 받는 방법 또는 규약 port = 8888 class Handler(CGIHTTPRequestHandler): cg_directories = ['/cgi-bin'] serv = HTTPServer(('127.0.0.1', port), Handler) print('웹 서비스 시작 ...') serv.serve_forever() main.html 메인페이지 he..
웹 서버 구축 - SimpleHTTPRequestHandler 서버를 준비하는 코드 # 웹 서버 구축 from http.server import SimpleHTTPRequestHandler, HTTPServer # HTTPServer : 기본적인 socket 연결을 관리 # SimpleHTTPRequestHandler : 요청을 처리 (get, post) port = 7777 handler = SimpleHTTPRequestHandler serv = HTTPServer(('127.0.0.1', port), handler) print('웹 서비스 시작 ...') serv.serve_forever() aaa.html 파이썬 지원 서버 daum bbb 문서 bbb.html 난 bbb~
웹 크롤링 - 미완성 웹 크롤링(Crawling)과 웹 스크래핑(Scraping)의 차이점 https://blog.codef.io/crawling_vs_scraping/ BeautifulSoup 공부 웹에 접근하고 문자열 데이터 속에서 필요한 데이터를 분석, 추출 # 멀티 프로세싱으로 웹 스크래핑 # https://beomi.github.io/beomi.github.io_old/ # 웹에 접근 import requests # 파싱 : 어떤 문자열 데이터 속에서 필요한 데이터를 분석, 추출하는 방식 from bs4 import BeautifulSoup as bs import time # 병렬처리 from multiprocessing import Pool def get_links(): # a tag의 주소 읽기 data = re..
thread - pull, process 직렬 처리 # GIL 정책에 의해 완전한 thread 구현은 불가능하다. # 그래서 multiprocessing 모듈로 GIL 우회하여 병렬처리가 가능하도록 하고 있다. from multiprocessing import Pool, Process import time import os # Pool : 입력 값에 대해 process들을 건너건너 분해하여 함수 실행을 병렬처리 def func(x): print('값 ', x, '에 대한 작업 process id : ', os.getpid()) time.sleep(1) return x * x if __name__ == '__main__': startTime =int(time.time()) for i in range(0, 10): print(func(i)) end..
socket, thread - 채팅 서버와 클라이언트 프롬포트에 netstat -ano | findstr :포트번호를 입력해서 사용중인 포트를 확인할 수 있다. 예시에서는 netstat -ano | findstr :5000 chatserver 멀티 채팅 서버 프로그램 기본 구조 주석 바인딩 주소는 로컬, 사용한 바인딩 주소는 ipconfig로 확인한 주소이다. # 멀티 채팅 서버 프로그램 - socket + thread import socket import threading ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # ss.bind(('127.0.0.1', 5000)) ss.bind(('192.168.0.75', 5000)) ss.listen(5) print('채팅 서버 서비스 시작...') user..
thread - lock (빵 공장 예제) lock을 사용하기 전 코드 공유 자원이 심하게 충돌하는 것을 확인할 수 있다. # thread 간의 자원공유 + thread 활성화/비활성화 import threading, time # 빵접시 - 공유자원 bread_plate = 0 lock = threading.Condition() # 빵 생산자 # thread 상속 class Maker(threading.Thread): def run(self): global bread_plate for i in range(3): bread_plate += 1 print('빵생산 : ',bread_plate) time.sleep(0.05) # 빵 소비자 class Consumer(threading.Thread): def run(self): global bread_p..
thread - 동기화(줄서기),lock을 활용한 전역변수 충돌 해결 반복문과 thread를 활용한 코드 결과를 보면 알 수 있듯이 thread를 사용하면 번갈아 가며 실행된다. 이때 전역변수를 사용할때 충돌이 일어날 수 있다는 문제가 생긴다. 예시에서도 g_count 전역변수 콘솔 결과를 보면 충돌로 인해 제대로 표기되지 않는 문제가 있다. # 여러 스레드 간 공유자원 충돌 방지 # 동기화(줄서기) - 하나의 스레드가 자원을 사용하는 동안 다른 스레드는 공유자원사용을 대기 import threading, time g_count = 0 # 전역변수는 자동으로 스레드의 공유자원이 됨 def threadCount(id, count): global g_count for i in range(count): print('id:%s ===> count:%s, g_count:%s'%(i..
thread 예시 (시계) 1초에 한번씩 시간이 반복적으로 프린트되는 시계 break로 지정한 조건에 부합하면 프로그램이 종료된다. # thread를 사용한 디지털 시간 출력 import time now = time.localtime() print(now) print('{}년 {}월 {}일 {}시 {}분 {}초'.format(now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec)) print('-------') import threading def cal_show(): now = time.localtime() print('{}년 {}월 {}일 {}시 {}분 {}초'.format( now.tm_year, now.tm_mon, now.tm_mday, now..