맥북 egpu 연동(nvidia)
안녕하세요 코코넛입니다. 최근에 egpu를 구입하여 맥북에 물려서 쓰게 되었는데요,
여러시간 삽질하면서 생긴 지식을 끄적여 보았습니다.
우선 제가 사용하는 맥북프로와 egpu 환경은
MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)
aorus gtx 1070 gaming box
입니다.
제가 구입한 egpu는 썬더볼트3 규격이며, 썬더볼트3를 지원하는 최근의 맥북이 있어야 연동하실 수 있습니다.
일단 들어가기에 앞서 맥북과 egpu를 연동해서 할 수 있는 것은 꽤 여러가지가 있는데요,
엔비디아 gpu가 들어간 egpu 기준으로 설명해드리겠습니다.
- 맥OS 상에서 cuda, cudnn, nvidia 웹드라이버를 통해 cuda 프로세싱을 쓸 수가 있습니다.(tensorflow 가능)
- 부트캠프에 윈도우를 설치하여 여러가지? 게임을 할 수 있습니다.
- 외에도 여러가지 그래픽카드로 가능한 여러가지 작업을 할 수가 있습니다.
저는 이 중에서 1번 사항에 해당하여 설치 및 연동을 해보게 되었는데요,
우선 맥에서 엔비디아 계열의 그래픽카드를 egpu로 사용하실 경우는 제약이 조금 따릅니다.
맥OS를 high sierra 10.13.X 에서 사용하셔야 합니다.(저도 모하비에서 다운그레이드 하려고 포맷을 ㅠㅠ…)
그리고 15인치 맥북같은 고급형에 들어가는 외장그래픽과 충돌이 날 수 있습니다.(이 부분이 까다롭습니다.)
자 이제 순서를 소개해 드리겠습니다.(맥OS가 high sierra 10.13.X가 설치되어 있다는 전제하에)
- 우선 SIP(System Integrity Protection)를 해제하셔야 합니다. 방법은 구글링 하시면 나오는데, 제 블로그에 있는 내용을 링크하겠습니다. https://buttercoconut.xyz/172/
- egpu를 냅두시고, 우선 맥북을 셋팅해줍니다. 자신의 맥OS 버전에 맞는 nvidia 웹드라이버를 다운받아서 설치를 해줍니다.(버전이 맞지 않으면 설치가 되지 않으니 맞을 것 같은 버전을 여러 종류로 다운받아서 설치하셔도 됩니다.)
- purge-wrangler, automate-eGPU 등의 여러가지의 auto-setting-scripts가 있지만 저는 purge-wrangler 추천해 드립니다.
- purge-wrangler를 설치하여, nvidia웹드라이버와 egpu를 연동할 수 있도록 합니다. https://github.com/mayankk2308/purge-wrangler

여기까지 하면 거의 다 끝났습니다.
재부팅을 하고 egpu를 연결하면 NVIDIA Driver Manager 에 들어가 보면 자신의 egpu가 인식됩니다.
%주의사항%
- 맥북이 켜져있고, egpu가 맥북에 연결이 되어 있을 경우 썬더볼트3 케이블을 usb처럼 마구 뽑으면 안됩니다.(반드시 맥북을 시스템 종료한 후 케이블을 뽑아야 합니다.)
- 외장그래픽이 들어간 고급형의 맥북의 경우는 외장그래픽과 충돌하여 블랙스크린이 나타날 수 있으니 https://egpu.io/ 포럼을 잘 확인하여 nvram 상에서 충돌이 나지 않도록 주의하여 다루도록 합니다.

추가로 cuda와 cudnn의 경우는 필요하신 경우에 설치하여 연동하실 수 있습니다.
https://developer.nvidia.com/cuda-downloads
https://developer.nvidia.com/rdp/form/cudnn-download-survey
두 링크를 통해 자신의 OS에 맞는 버전을 다운받아서 설치하시면 됩니다.
여기까지 마치겠습니다.
'Mac' 카테고리의 다른 글
MeCab 및 mecab-python 설치하기(MacOS) (0) | 2019.02.06 |
---|---|
MacOS 에서 SIP(System Integrity Protection status) 해제하기 (0) | 2018.04.13 |
Python list VS Numpy for matrix multiply
Hello!! I’m Coconut~
This time, running simple test for matrix multiply with python list and python numpy
Run environment : 800 by 400 X 400 by 800 => 800 by 800
Case1: python list for loop matmul

Case2: numpy ndarray matmul

In this test, Numpy calculation is 180 times faster than python list loop calculation
If you want view this test code, move to below
# -*- coding: utf-8 -*-
import numpy as np
from datetime import datetime
# 일반적인 행렬
normal_matrix1 = [[x for x in range(1, 401)] for e in range(1, 801)]
# numpy 행렬 선언
np_mat1 = np.array(normal_matrix1)
# 행렬2
normal_matrix2 = [[x for x in range(401, 1201)] for e in range(1, 401)]
# numpy 행렬2 선언
np_mat2 = np.array(normal_matrix2)
print("1 : " + str(np_mat1) + str(np_mat1.shape))
print("2 : " + str(np_mat2) + str(np_mat2.shape))
start = datetime.now()
# print(np_test + np2_test)
print("-----------------------------------------------------------------")
mul = np.matmul(np_mat1, np_mat2)
print(str(mul) + " / dimension : " + str(mul.shape))
print("-----------------------------------------------------------------")
end = datetime.now()
# numpy 벡터연산 걸린 시간
print("numpy duration_time : " + str(end - start))
print("-----------------------------------------------------------------")
result = [[0 for x in range(1, 801)] for e in range(1, 801)]
start_normal = datetime.now()
for i in range(len(normal_matrix1)):
for j in range(len(normal_matrix2[0])):
for k in range(len(normal_matrix2)):
result[i][j] += normal_matrix1[i][k] * normal_matrix2[k][j]
end_normal = datetime.now()
# list 연산 걸린 시간
print(str(result))
print("-----------------------------------------------------------------")
print("normal calculation duration_time : " + str(end_normal - start_normal))
print("-----------------------------------------------------------------")
'Python' 카테고리의 다른 글
json to csv by python method call(파이썬으로 json을 csv 변환) (0) | 2019.09.06 |
---|---|
python으로 동영상 정보 확인하기(feat. PyAV) (0) | 2019.06.10 |
파이썬 크롤링의 기초와 간단한 실행 (1) | 2019.06.10 |
Python을 이용한 엑셀 읽기 및 쓰기(xlrd, xlwt) (0) | 2019.06.10 |
zappa를 이용한 파이썬 서버리스 구현 (0) | 2019.02.14 |
파이썬 크롤링의 기초와 간단한 실행
안녕하세요 코코넛입니다. 이번에는 크롤링 관련 세미나를 진행하면서 정리한 자료를 포스팅하게 되었습니다.
세미나를 진행하면서 사용한 ppt를 포스팅에서 그대로 사용하였습니다.
자 이제 시작합니다!
순서는 간단하게 왜 어떻게 하는지에 대한 이유와 실생활에서 쓰이는 예시,
그리고 전체적인 흐름 및 실행을 다루고 있습니다.
크롤링은 자신의 원하는 정보를 웹페이지에서 가져오는 행위 또는 작업의 의미로 일컬어 집니다.
흔한 예로 구글의 검색엔진에 우리가 검색해서 나오는 정보들도 모두 구글의 봇이 크롤링을 하여서 얻어진
정보입니다.
자사의 제품의 정보를 보통은 오픈 마켓에 제공을 하지만 그 외 제품의 정보를 크롤링하여 가져오기도 합니다.
참고로 크롤링한 정보를 상업적으로 사용하려면 정보를 제공하는 측의 허가를 먼저 얻어야 합니다.
API를 통해 얻어오지 못하는 정보도 크롤링으로 얻어올 수 있지요~
크롤링 도구가 있어야 크롤링을 할 수 있겠죠~!
먼저 크롤링할 웹페이지에 접속, 정보선택 후 정보를 가져옵니다. 그 후에 필요한 정보를 파싱하여 사용 혹은 저장!
여기서는 실행할 예시에 셀레늄을 사용하고 있습니다.
가져올 정보의 인덱스를 책갈피에 빗대어 설명을 하였습니다.
실행할 예시입니다.
용어 정리!
실행에 사용한 예제 코드도 첨부하였습니다.
#-*- coding: utf-8 -*- from selenium import webdriver from bs4 import BeautifulSoup as bs import time search_keyword = "초코파이" # 크롤링 도구 driver = webdriver.Chrome('/Users/yutaewoong/Downloads/chromedriver') driver.implicitly_wait(3) time.sleep(5) # 오픈마켓 접속 driver.get('http://www.auction.co.kr/') time.sleep(5) # 상품 검색 driver.find_element_by_xpath("//*[@class='search_input_keyword']").send_keys(search_keyword) time.sleep(3) driver.find_element_by_xpath("//*[@class='search_btn_ok']").click() time.sleep(5) # 상품리스트 가져오기 html = driver.page_source soup = bs(html, 'html.parser') itemlist = soup.findAll("div", {"class": "section--itemcard"}) time.sleep(10) # 가져온 상품리스트에서 필요한 상품명, 가격, 상품링크를 출력!! for item in itemlist: title = item.find("span", {"class": "text--title"}).text price = item.find("strong", {"class": "text--price_seller"}).text link = item.find("span", {"class": "text--itemcard_title ellipsis"}).a['href'] print("상품명 : " + title) print("가격 : " + price + "원") print("상품 링크 : " + link) print("------------------------") time.sleep(10) driver.close()
여기까지 간단히 소개를 마치겠습니다.
여러분께 도움이 되기를 바라겠습니다~~
'Python' 카테고리의 다른 글
python으로 동영상 정보 확인하기(feat. PyAV) (0) | 2019.06.10 |
---|---|
Python list VS Numpy for matrix multiply (0) | 2019.06.10 |
Python을 이용한 엑셀 읽기 및 쓰기(xlrd, xlwt) (0) | 2019.06.10 |
zappa를 이용한 파이썬 서버리스 구현 (0) | 2019.02.14 |
간단한 python 이메일 연동하기 (0) | 2019.01.27 |
Python을 이용한 엑셀 읽기 및 쓰기(xlrd, xlwt)
안녕하세요, coconut입니다 이번에는 파이썬을 이용한 엑셀 읽고 쓰기를 알려드리려 합니다.
일단 지금 포스팅에서 쓰이는 라이브러리는 .xls만 지원한다는 점에 유의해 주시기 바랍니다.
.xlsx를 기대하고 찾으신 분은 아쉽지만 다른 블로그를 참고해 주시기 바랍니다.
바로 들어갑니다. 일단 .xls 읽어와 datadict에 저장하기
# -*- coding: utf-8 -*- import xlrd # 읽기 라이브러리를 통해 현재 같은 디렉터리상에 있는 test.xls를 불러와 workbook에 할당합니다. workbook = xlrd.open_workbook('test.xls') # 워크북에 할당된 엑셀 데이터의 첫번째시트를 불러옵니다. worksheet = workbook.sheet_by_index(0) # nrows에 불러온 첫번째 시트의 행수를 불러옵니다. nrows = worksheet.nrows # 불러온 데이터를 저장할 딕셔너리를 선언합니다. datadict = {} # 행수만큼의 for loop 를 돌려서 행단위로 데이터를 불러와 datadict에 저장합니다. for row_num in range(nrows): datadict[row_num] = {} # field_cnt는 열의 개수입니다. 열갯수는 여러분이 지정하시면 됩니다. for col in range(field_cnt): # datadict[row_num]에 열숫자별로 셀데이터를 저장합니다. datadict[row_num][col] = worksheet.cell_value(row_num, col)
다음은 엑셀 쓰기
workbookw = xlwt.Workbook(encoding='utf-8') # utf-8 인코딩 방식의 workbook 생성 workbookw.default_style.font.height = 20 * 11 worksheetw = workbookw.add_sheet('시트 이름') # 시트 생성 # 2번째 행부터 데이터를 입력합니다. for row_num in range(nrows): for col in range(field_cnt): worksheetw.write(row_num, col, datadict[row_num][col]) # 할당된 데이터셋을 'result.xls'로 저장합니다. workbookw.save("result.xls")
여기까지 간단한 파이썬 엑셀파일 읽고 쓰기였습니다.
'Python' 카테고리의 다른 글
Python list VS Numpy for matrix multiply (0) | 2019.06.10 |
---|---|
파이썬 크롤링의 기초와 간단한 실행 (1) | 2019.06.10 |
zappa를 이용한 파이썬 서버리스 구현 (0) | 2019.02.14 |
간단한 python 이메일 연동하기 (0) | 2019.01.27 |
python socket(tcp, udp) 사용하기 (0) | 2018.12.02 |
zappa를 이용한 파이썬 서버리스 구현
안녕하세요 이번에는 python 코드를 서버없이 실행할 수 있게 해주는 zappa를
사용하는 방법을 소개하겠습니다.
우선 zappa에 관해 간단히 설명을 하겠습니다.
최근들어 aws, azure, gcp 같은 클라우드 플랫폼 서비스에서 서버리스 제품이 출시되고 있는데요,
서버리스란 말 그대로 프로덕트를 서버에서 실행시키지 않고, 자원을 분산시켜 함수는 함수대로 DB는
DB대로 각각 나누어 연동시켜 프로덕트를 동작하게 한다고 할 수 있습니다.
그중에서도 저는 파이썬 패키지로 작성된 서버리스 도구인 zappa를 소개하려고 합니다.
우선 zappa를 설치하는 방법은 각자 자신이 사용하는 파이썬 환경에서
pip install zappa
를 실행하여 주면 됩니다.
현재 zappa는 파이썬 2.7 과 3.6 에서 지원이 되니 참고해 주세요.
간단한 python 모듈을 zappa로 실행시켜 보겠습니다.
myapp.py
# -*- coding: utf-8 -*- from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World! Hello everyone!" if __name__ == "__main__": app.run()
myapp.py를 이런식으로 작성한 뒤
zappa init
명령을 내려줍니다.
aws에 로그인하여 IAM에 접속하여 사용자를 추가해 줍니다.
사용자를 추가할 때 aws_access_key_id와 aws_secret_access_key를 얻을 수 있습니다.
그 키를 ~/.aws/credentials 파일이 아래와 같이 저장해 줍니다.
[default] aws_access_key_id=xxxxxxxxxxxxxxxxxxx aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
zappa init를 통해 만들어진 zappa_settings.json 파일을 수정하여 클라우드 서버 환경을 연동시킬 수 있습니다.
예제
{ "dev": { "app_function": "myapp.app", "aws_region": "ap-northeast-2", "profile_name": "default", "project_name": "test", "runtime": "python3.6", "s3_bucket": "test_bucketname" } }
이제 zappa_settings.json이 존재하는 경로상에서
zappa deploy dev
로 aws 상에서 배포를 하면 끝납니다.
소스를 고치면 다른 명령어로 배포를 할 수 있습니다.
zappa update dev
여기까지 간단한 zappa 사용법이었습니다. 끝!
'Python' 카테고리의 다른 글
파이썬 크롤링의 기초와 간단한 실행 (1) | 2019.06.10 |
---|---|
Python을 이용한 엑셀 읽기 및 쓰기(xlrd, xlwt) (0) | 2019.06.10 |
간단한 python 이메일 연동하기 (0) | 2019.01.27 |
python socket(tcp, udp) 사용하기 (0) | 2018.12.02 |
linux 파일 동기화 소스 auto_sync (0) | 2018.09.09 |
MeCab 및 mecab-python 설치하기(MacOS)
안녕하세요 코코넛입니다.
이번에는 형태소분석기 중에서도 뛰어난 능력을 자랑하는 은전한닢(MeCab)을
MacOS에 설치하는 방법을 메모할 겸 포스트하게 되었습니다.
https://bitbucket.org/eunjeon/mecab-ko/downloads/
우선 위의 링크의 최신 버전의 mecab-ko 을 다운로드 하여 설치합니다. (혹은 mecab-0.996-ko-0.9.2.tar.gz)
tar xzvf mecab-0.996-ko-0.9.2.tar.gz cd mecab-0.996-ko-0.9.2 ./configure make sudo make install
위의 링크로 가서 최신 사전을 다운로드하여 설치합니다. (혹은 mecab-ko-dic-2.1.1-20180720.tar.gz)
tar xvfz mecab-ko-dic-2.1.1-20180720.tar.gz cd mecab-ko-dic-2.1.1-20180720 ./configure make sudo make install
git clone https://bitbucket.org/eunjeon/mecab-python-0.996.git cd mecab-python-0.996 python setup.py build python setup.py install
그런데 python setup.py 을 통해 설치가 안될 때가 있습니다.
MACOSX_DEPLOYMENT_TARGET=10.9 python3 setup.py build MACOSX_DEPLOYMENT_TARGET=10.9 python3 setup.py install
import MeCab m = MeCab.Tagger() te = m.parse('영등포구청역에 있는 맛집 좀 알려주세요.') print(te)
'Mac' 카테고리의 다른 글
맥북 egpu 연동(nvidia) (0) | 2019.06.10 |
---|---|
MacOS 에서 SIP(System Integrity Protection status) 해제하기 (0) | 2018.04.13 |
우분투에 turn server 구축하기
안녕하세요 이번에는 제가 WebRTC 를 이용해 무언가?를 만드는 과정에서
peer 간에 네트워크 상에서 연결을 중계시켜주는 역할을 하는 turnserver를
구축하여 동작하는 것까지 포스팅을 해보았습니다.
우분투 환경 기준으로 작성을 하였습니다.
- coturn을 설치합니다. (sudo apt install coturn)
- /etc/turnserver.conf 파일을 수정하여 서버환경을 셋팅합니다.
- turnadmin으로 사용자 계정을 추가해 줍니다.
- coturn을 서버상에서 실행합니다. 끝~
turnserver.conf 는 제가 셋팅한 파일의 내용을 올리겠습니다. (네트워크 환경에 따라 조금씩 수정하셔야 합니다.)
아래의 설정을 하기 전에 포트포워딩 또는 방화벽을 통해 tcp 3478 & tcp 5349 포트를 허용해 주셔야 합니다.
# turnserver의 포트입니다. listening-port=3478 # tls 포트입니다. tls-listening-port=5349 # 외부IP를 넣어줍니다.(공유기 사용시 WAN상의 외부IP를 넣어줍니다.) external-ip=123.123.126.123 # 로그를 뽑을 수 있으니 주석을 해제하였습니다. verbose # 이것도 주석해제 fingerprint # 인증방식 주석해제 lt-cred-mech # turnserver 도메인 네임입니다. server-name=test.com # 릴름은 원하는 네임명으로 해줍니다. realm=testname
위의 /etc/turnserver.conf 를 수정한 뒤에 저장을 해줍니다.
그 다음에는 turnadmin 을 통해 turnserver를 사용할 수 있는 계정을 생성해 줍니다.
turnadmin -a -u 계정이름 -p 계정패스워드 -r 릴름명
위의 방식으로 turnadmin을 통해 계정을 추가하면 거의 끝!
마지막으로 turnserver 실행~
sudo service coturn start
turnserver에 유저가 접속하여 중계 상태가 되면
/var/log/turn_14545_2019-01-27.log 같은 형식을 log 파일의 용량이 늘어나면서 로그가 쌓이게 됩니다.
여기까지 우분투서버에 turn 서버 설치하기 였습니다.
끝~!
'etc' 카테고리의 다른 글
윈도우 WSL2 설정 (포트포워딩, vmmem 이슈, 시작 프로그램 등) (0) | 2021.12.25 |
---|---|
wakeonlan use by terminal(wol 리눅스에서 사용하기) (0) | 2018.04.10 |
fortran 컴파일하고 사용하기 (0) | 2017.11.17 |
간단한 python 이메일 연동하기
안녕하세요 2019년 새해 첫 포스팅은 이메일에 관한 글입니다.
주제는 파이썬으로 이메일 연동하기입니다.
이메일은 크게 smtp(발신) / pop, imap(수신) 프로토콜을 이용해서 전송 및 수신을 합니다.
저는 몇 일간의 삽질을 바탕으로 받고 보내는 함수를 만들었습니다.
이를 바탕으로 여러분도 응용하여 이메일을 손쉽게 제어하시기 바랍니다.
자, 이제 소스를 공개!
import smtplib import imaplib import poplib import email from email.mime.text import MIMEText from datetime import datetime # 보낼 곳과 연동할 이메일 계정 sendto = '받는사람@이메일.com' user = '보내는사람@이메일.com' password = "보내는사람 이메일 패스워드" # 메일을 보내는 함수(smtp) def send_mail(user, password, sendto, msg_body): # smtp server smtpsrv = "smtp.office365.com" # 발신 메일서버 주소 smtpserver = smtplib.SMTP(smtpsrv, 587) # 발신 메일서버 포트 smtpserver.ehlo() smtpserver.starttls() smtpserver.login(user, password) msg = MIMEText(msg_body) msg['From'] = user msg['To'] = sendto msg['Subject'] = "Module Testing email Subject" smtpserver.sendmail(user, sendto, msg.as_string()) print('done!') smtpserver.close() # 메일을 받는 함수(imap4) def check_mail_imap(user, password): # imap server imapsrv = "outlook.office365.com" imapserver = imaplib.IMAP4_SSL(imapsrv, "993") imapserver.login(user, password) imapserver.select('INBOX') res, unseen_data = imapserver.search(None, '(UNSEEN)') ids = unseen_data[0] id_list = ids.split() latest_email_id = id_list[-10:] # 메일리스트를 받아서 내용을 파일로 저장하는 함수 for each_mail in latest_email_id: # fetch the email body (RFC822) for the given ID result, data = imapserver.fetch(each_mail, "(RFC822)") msg = email.message_from_bytes(data[0][1]) while msg.is_multipart(): msg = msg.get_payload(0) content = msg.get_payload(decode=True) f = open("email_" + str(datetime.now()) + ".html", "wb") f.write(content) f.close() imapserver.close() imapserver.logout() # 메일을 받는 함수(pop) def check_mail_pop(user, password): # imap server popsrv = "pop.test.kr" popserver = poplib.POP3(popsrv, "110") popserver.user(user) popserver.pass_(password) numMsg = len(popserver.list()[1]) for i in range(numMsg): raw_email = b"\n".join(popserver.retr(i + 1)[1]) msg = email.message_from_bytes(raw_email) while msg.is_multipart(): msg = msg.get_payload(0) content = msg.get_payload(decode=True) f = open("email_" + str(datetime.now()) + ".html", "wb") f.write(content) f.close() popserver.close() if __name__ == '__main__': # imap형식 수신 함수 check_mail_imap(user, password) # pop형식 수신 함수 check_mail_pop(user, password) # 메일을 보내는 함수 smtp send_mail(user, password, sendto, "안녕하세요 코코넛이 이메일을 보냅니다.")
여기까지 저는 수신한 이메일을 파일로 저장하는 소스를 만들었는데요.
여러분 입맛대로 수정해서 쓰시면 됩니다.
'Python' 카테고리의 다른 글
Python을 이용한 엑셀 읽기 및 쓰기(xlrd, xlwt) (0) | 2019.06.10 |
---|---|
zappa를 이용한 파이썬 서버리스 구현 (0) | 2019.02.14 |
python socket(tcp, udp) 사용하기 (0) | 2018.12.02 |
linux 파일 동기화 소스 auto_sync (0) | 2018.09.09 |
Python패키지 목록 requirements.txt 관리하기 (0) | 2018.08.08 |
python socket(tcp, udp) 사용하기
이번에는 python에서 기본으로 제공하는 socket 모듈을 사용하는 방법을 다루겠습니다.
socket 통신에는 tcp와 udp 두가지가 있습니다.
1. 먼저 tcp – sender
# socket module import! import socket # socket create and connection sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(("123.123.123.123", 9999)) # send msg test_msg = "안녕하세요 상대방님" sock.send(test_msg) # recv data data_size = 512 data = sock.recv(data_size) # connection close sock.close()
우선 tcp는 위에 모듈을 임포트 한 뒤에 소켓 통신을 할 ip(저는 임의로 123.123.123.123)와 포트를 지정 후에
연결을 합니다.
연결이 성사 되면 test_msg를 send합니다. 그리고 send가 끝나는 동시에 data를 data_size만큼 받아오게 됩니다.
이렇게 tcp를 사용할 수 있습니다. 상황에 맞게 for루프를 돌리거나 수정해서 사용하면 됩니다.
2. tcp – receiver
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) recv_address = ('0.0.0.0', 9999) sock.bind(recv_address) sock.listen(1) conn, addr = s.accept() # recv and send loop while 1: data = conn.recv(BUFFER_SIZE) # 받고 data를 돌려줌. conn.send(data) conn.close()
받는 쪽 즉, 서버쪽의 tcp 소스 입니다.
3. 그리고 udp – sender
import socket # connection create send_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) dest = ("127.0.0.1", 9999) # send to dest send_sock.sendto(data, dest) send_sock.close()
위에 소스는 출발지 소켓 소스입니다.
4. udp – receiver
import socket # socket create sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Bind the socket to the port recv_address = ('0.0.0.0', 9999) sock.bind(recv_address) data_size = 512 data, sender = sock.recvfrom(data_size) sock.close()
위 소스는 목적지 소켓 소스입니다.
끝~!
'Python' 카테고리의 다른 글
zappa를 이용한 파이썬 서버리스 구현 (0) | 2019.02.14 |
---|---|
간단한 python 이메일 연동하기 (0) | 2019.01.27 |
linux 파일 동기화 소스 auto_sync (0) | 2018.09.09 |
Python패키지 목록 requirements.txt 관리하기 (0) | 2018.08.08 |
실시간으로 뉴스를 크롤링하여 뉴스 검색엔진 API 만들기 (1) | 2018.08.07 |
linux 파일 동기화 소스 auto_sync
소개
안녕하세요 이번에는 리눅스 파일 동기화 기능을 가진 auto_sync를 소개합니다.
이 프로그램은 sftp를 이용하여 리눅스 시스템 간에 파일을 동기화 시켜줍니다.
사용 환경
우선 환경은 리눅스OS에 파이썬 3.x버전을 사용하고 paramiko라는 모듈을 설치해 주셔야 합니다.
간단히 파이썬 3버전 환경에서 paramiko만 설치해주시면 됩니다.
명령어는 pip install paramiko 입니다.
설치 및 실행
그리고 깃허브에서 프로젝트를 받아줍니다.
git clone https://github.com/buttercoconut/auto_sync.git
받은 소스에서 설정파일을 수정해줍니다.
auto_sync/config/example.conf 를 자신이 동기화 하고자 하는 서버 정보로 수정을 한 뒤에
크론탭 또는 직접 실행하여 동기화를 진행하실 수 있습니다.
수동으로 실행하는 명령어는
- python project_root/main/processor.py [conf_file_name] [task]
- ex)python auto_sync/main/processor.py example recv # example.conf의 설정 서버에서 파일을 받아옴.
task 에는 두가지가 있습니다.
recv / send
크론탭을 이용하여 일정시간마다 동기화하실 경우
우선 프로젝트 폴더 안에 run.sh 배치 파일을 생성하여 실행 스크립트를 작성합니다.
run.sh
#!/usr/bin/env bash source /home/username/anaconda/bin/activate auto_sync python /home/username/auto_sync/main/processor.py util recv python /home/username/auto_sync/main/processor.py util send python /home/username/auto_sync/main/processor.py doc recv python /home/username/auto_sync/main/processor.py doc send
이러한 식으로 하셔도 되고 맘에 드는 방법으로 수정해서 사용해도 됩니다.
crontab -e 로 크론탭 수정 모드에서
0분과 30분 마다 동기화 진행
0,30 * * * * /home/username/auto_sync/run.sh
동기화 성공 시 소스가 실행된 위치 상에 log디렉터리에 log가 생성됩니다.
'Python' 카테고리의 다른 글
간단한 python 이메일 연동하기 (0) | 2019.01.27 |
---|---|
python socket(tcp, udp) 사용하기 (0) | 2018.12.02 |
Python패키지 목록 requirements.txt 관리하기 (0) | 2018.08.08 |
실시간으로 뉴스를 크롤링하여 뉴스 검색엔진 API 만들기 (1) | 2018.08.07 |
Python sounddevice를 이용한 소리 탐지 (0) | 2018.04.23 |