'컴퓨터' 카테고리의 글 목록 (3 Page) :: 테크니션
반응형

주식 api를 쓰다 보면 휴일을 입력 할때 데이터를 못받아 주는 경우가 있다

그래서 특정 날짜를 입력했을때 가장 가까운 영업일로 바꿔주고

한국시장은 일하는데 미국시장은 쉬는 1월 16일(월) 마틴루터킹 데이에서 각각 구분이 되는지 확인해 보았다

import pandas_market_calendars as mcal
import datetime

# define the Korea Exchange calendar
korea_calendar = mcal.get_calendar('XKRX')
AME_calendar = mcal.get_calendar('NYSE')
start_date = '2020-01-01'
end_date = '2025-12-31'
schedule_kr = korea_calendar.schedule(start_date=start_date, end_date=end_date)
business_days_kr = schedule_kr.index.date.tolist()
schedule_ame = AME_calendar.schedule(start_date=start_date, end_date=end_date)
business_days_ame = schedule_ame.index.date.tolist()

tdy = datetime.date(2023, 1, 16)
if tdy in business_days_kr:
    ytdy_kr = tdy
else:
    result_list = [x for x in business_days_kr if x < tdy]
    ytdy_kr = result_list[-1]

if tdy in business_days_ame:
    ytdy_ame = tdy
else:
    result_list = [x for x in business_days_ame if x < tdy]
    ytdy_ame = result_list[-1]
print(ytdy_kr)
print(ytdy_ame)

결과 :

2023-01-16
2023-01-13

1월 16일에서 가장 가까운 한국장 영업일은 당일이고

미국장은 그날 쉬기 때문에 1월 13일을 반환하였다

 

 

 

반응형
반응형
aws를 통해 만든 ec2 서버에서 웹을 만들고 IP 로 된 웹에 도메인을 등록하려면 다음 절차가 필요하다
  1. Route 53 검색 후 호스팅 영역생성
  2. 호스팅 영역 생성 설정
  3. 생성한 도메인의 레코드 생성
  4. 레코드 생성 설정
  5. 레코드 생성완료 & 가비아와 연결할 주소 확인
  6. My가비아 -> 구입도메인의 관리 탭 클릭
  7. 네임서버 설정
  8. 완료 ☆

그런데 실제 저 절차로 진행하니 안되서 새로 알아보니 포트번호 관련 프로세스 하나가 더 필요했다

웹을 가동하기 위한 포트번호(80, 443 외 하나 더) 를 aws 보안그룹에 등록하는데 

그 포트번호를 인식할수 잇는 다음 명령어를 서버 콘솔에 입력을 해 줘야 도메인과 연결이 된다

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port (포트번호)
반응형
반응형

백그라운드 실행(콘솔 종료 후에도 돌아가게)

 

nohup python main.py&

 

 

코드 수정을 위한 서버 종료하기 (강제 종료)

 

아래 명령어로 미리 pid (프로세스 번호) 본다

 

ps -ef | grep ‘main.py'

 

 아래 명령어로 특정 프로세스를 죽인다

 

kill -9 [pid값]

 

 

#다시 켜기

 

nohup python main.py &

반응형
반응형

리눅스는 다음과 같은 몇 가지 이유로 서버를 작성할 때 윈도우나 다른 GUI 기반 운영 체제보다 선호된다:

안정성: Linux는 안정성과 견고성으로 잘 알려져 있으며, 이는 다운타임 없이 지속적으로 실행해야 하는 서버에 매우 중요합니다. 많은 리눅스 배포판들은 가볍고 서버 환경에 최적화되어 안정성에 기여한다.

보안: 리눅스는 윈도우나 다른 GUI 기반 운영 체제보다 더 안전한 것으로 알려져 있다. 한 가지 이유는 리눅스가 윈도보다 사용자 기반이 작아 악성코드와 해커들에게 덜 매력적인 대상이 된다는 것이다.
또한 Linux 사용자는 방화벽과 같은 보안 기능을 더 잘 제어할 수 있으며 특정 보안 요구 사항을 충족하도록 사용자 정의할 수 있습니다.

오픈 소스: 리눅스는 오픈 소스 운영 체제로, 소스 코드는 누구나 자유롭게 사용할 수 있다. 이를 통해 개발자는 자신의 요구에 맞게 코드를 수정하고 사용자 정의할 수 있으므로 보다 맞춤형 솔루션이 가능합니다.
또한 리눅스의 오픈 소스 특성은 협업과 커뮤니티 지원을 촉진하여 문제를 보다 신속하게 해결할 수 있도록 지원합니다.

비용 효율적: 리눅스는 무료이고 오픈 소스이기 때문에 서버를 위한 비용 효율적인 솔루션입니다. 이렇게 하면 값비싼 라이센스를 구입할 필요가 없어지므로 대규모 서버 구축에 상당한 비용이 소요될 수 있습니다.

확장성: Linux는 확장성이 뛰어나므로 성능 저하 없이 대규모 배포를 처리할 수 있습니다. 따라서 서버 인프라를 신속하게 확장해야 하는 조직에 이상적인 솔루션입니다.

전반적으로 리눅스의 안정성, 보안, 오픈 소스 특성, 비용 효율성, 확장성은 윈도우나 다른 GUI 기반 운영 체제보다 서버 쓰기에 선호되는 운영 체제로 만든다.

반응형
반응형

스레드와 프로세스는 모두 실행 단위이지만 특성과 목적이 다릅니다.

프로세스는 운영 체제에서 실행되는 프로그램 또는 작업입니다.

자체 메모리 공간, 파일 및 네트워크 연결과 같은 시스템 리소스가 있으며 여러 스레드로 구성될 수 있습니다.

각 프로세스는 다른 프로세스와 완전히 격리되어 있습니다.

즉, 메시지 전달이나 공유 메모리와 같은 프로세스 간 통신 메커니즘을 거치지 않고는

다른 프로세스의 메모리나 리소스에 액세스하거나 수정할 수 없습니다.

---------------

다른 한편 한편 스레드는 프로세스 내에서 가벼운 실행 단위입니다.

스레드는 상위 프로세스와 동일한 메모리 및 리소스를 공유하므로

동일한 프로세스 내의 다른 스레드와 동일한 메모리 및 리소스에 액세스하고 수정할 수 있습니다.

프로세스 내의 스레드는 동시에 실행될 수 있으며 공유 메모리를 통해 서로 통신할 수 있습니다.

-----------

요약하면 프로세스는 자체 메모리와 시스템 리소스가 있는 독립적인 실행 단위인

반면 스레드는 프로세스 내에서 작동하고 동일한 프로세스 내의 다른 스레드와 동일한 메모리 및 리소스를 공유하는 경량 실행 단위입니다.

동일한 프로세스 내에서 여러 스레드가 작동할 수 있지만 각 프로세스는 다른 프로세스와 완전히 격리됩니다.

반응형
반응형

컴퓨터 아키텍처.

컴퓨터 아키텍처는 특정 기능을 수행할 수 있게 해주는 하드웨어와 소프트웨어를 포함하여 컴퓨터 시스템의 내부 구성 요소를 설계한 것입니다.

이제 컴퓨터 시스템의 기본 구성 요소에 대해 이야기해 보겠습니다.

컴퓨터 시스템은 일반적으로 CPU, 메모리, 입/출력 장치 및 시스템 버스로 구성됩니다.

CPU 또는 중앙 처리 장치는 명령 실행을 담당하는 컴퓨터의 두뇌입니다.

메모리 또는 RAM은 데이터와 명령을 일시적으로 저장하는 데 사용됩니다.

입력/출력 장치에는 키보드, 마우스, 프린터 및 모니터가 포함됩니다.

마지막으로 시스템 버스는 CPU, 메모리 및 I/O 장치 간에 데이터를 전송하는 데 사용됩니다.

-----------

다음으로 메모리 계층 구조에 대해 설명하겠습니다.

메모리 계층 구조는 성능을 최적화하기 위해 컴퓨터 시스템에서 메모리를 구성하는 방법입니다.

레지스터로 알려진 가장 빠르고 가장 비싼 수준에서

디스크 스토리지로 알려진 가장 느리고 가장 저렴한 수준까지 여러 수준으로 구성됩니다.

그 사이에는 속도와 비용의 균형을 제공하는 캐시 및 메인 메모리와 같은 수준이 있습니다.

-------------------------

계속해서 명령 세트 아키텍처(ISA)에 대해 이야기해 보겠습니다.

ISA는 CPU가 실행할 수 있는 명령 집합입니다. 각 명령은 고유한 이진 코드로 표시됩니다.

ISA에는 복합형과 축소형의 두 가지 유형이 있습니다.

복잡한 ISA에는 많은 수의 명령어가 있는 반면, 축소된 ISA에는 더 적은 수의 명령어가 있어 더 빠르게 실행할 수 있습니다.

--------------------

이제 파이프라이닝에 대해 알아보겠습니다.

파이프라이닝은 성능을 향상시키기 위해 CPU에서 사용되는 기술입니다.

여기에는 명령을 더 작은 단계로 나누고 동시에 처리하는 작업이 포함됩니다.

그렇게 함으로써 CPU는 한 번에 여러 명령을 처리하여 처리량을 높일 수 있습니다.

--------------------

계속해서 캐시에 대해 이야기해 보겠습니다.

캐시는 자주 액세스하는 데이터를 저장하는 작은 고속 메모리입니다.

자주 액세스하는 데이터를 캐시에 저장하면 CPU가 더 빠르게 액세스할 수 있으므로 명령을 실행하는 데 걸리는 시간이 줄어듭니다.

--------------

다음으로 가상 메모리에 대해 알아보겠습니다.

가상 메모리는 응용 프로그램에서 사용할 수 있는 사용 가능한 메모리의 양을 확장하기 위해 운영 체제에서 사용하는 기술입니다.

임시로 RAM에서 디스크 저장소로 데이터를 전송하고 다른 프로세스를 위해 RAM을 확보합니다.

------------

이제 멀티프로세싱과 병렬성에 대해 이야기해 보겠습니다.

다중 처리는 작업을 동시에 수행하기 위해 여러 CPU를 사용하는 것입니다.

반면 병렬 처리는 단일 CPU 내에서 여러 처리 장치를 사용하여 작업을 동시에 수행하는 것입니다.

----------

마지막으로 성능 평가에 대해 살펴보겠습니다.

성능 평가에는 컴퓨터 시스템의 속도와 효율성 측정이 포함됩니다.

 

반응형
반응형

python 을 일정 시간, 시각 동작 시키는 것은 schedule 모듈을 활용하거나 time을 활용한다

방법은 너무 많으니 찾아보기 바란다 

내가 하려는 것은 Python 으로 Flask를 구동 시켜서 html 페이지에 올라가는 데이터를 일정 주기로 바꿔서 올려주는 코드를 만들고 싶었다

python -> text -> python -> html 로 데이터가 전달이 되는데 html이 한번 구동 되면 

데이터 변동이 있어도 반영이 안되었다

그래서 html을 종료시키고 새로운 데이터로 첨부터 다시 저 루트로 데이터를 받아서 html에 새로 보여주는 방법을 찾아보았다

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

이렇게 실행하면 

이렇게 화면이 나오고 저 웹을 종료시키기 위해선 ctrl c를 직접 눌러줘야 한다

그래서 flask  구동 후 일정 시간 후에 시스템을 종료하는 코드를 작성하였다

import sys
from datetime import datetime
from flask import Flask, render_template, request
import os
import threading
import signal


def handle_alarm(signum, frame):
    sys.exit()
    # Flask 애플리케이션 종료

app = Flask(__name__)

# Define a route for the app
@app.route("/")
def index():
    
    return render_template('index.html',
                           )

if __name__ == '__main__':
    signal.signal(signal.SIGALRM, handle_alarm)
    signal.alarm(30)
    threading.Timer(30, lambda: None).start()
    app.run(host='0.0.0.0', port=8080, debug=True, use_reloader=False)

30초 후에 종료되는 코드이며 시간은 main 에서 초 단위로 조절이 가능하다

반응형
반응형

이진 트리(binary tree)

모든 노드들의 자식 노드가 두 개 이하인 트리를 의미한다

서브 트리가 두 개 이하기 때문에 서브 트리는 왼쪽 서브 트리와 오른쪽 서브 트리로 구분한다.

1.전위 순회(Preorder) :Root -left -right

1

2 3

2.중위 순회(Inorder) : left-root-right

2

1 3

3.후위 순회(Postorder) :left-right-root

3

1 2

숫자는 순회하는 순서이다. 이름이 다 그 이름 같고 영어로만 말해도 알아 들을수 있어야 하기 때문에

6개 의 명칭 및 순회방법이 서로 매칭이 되어야 한다

이 트리를 3가지 방법으로 순회해보자

1. 전위순회(PreOrder)

2 - (7 하위) - (5 하위)

순서로 순회한다

2번 7 하위를 쪼개보자

7 - 2 하위 -6하위

6 하위를 쪼개보자

6-5-11

---> 2 - (7 하위) - (5 하위)

: 2 - (7-(2)-(6-5-11)) - (5하위)

5 하위는 9 - 4 순서대로 간다

결론 : 2-7-2-6-5-11-5-9-4 [Preorder]

InOrder은 다음기회에

반응형
반응형

2.중위 순회(Inorder) : left-root-right

2

1 3

아래 트리를 순회해보자

첫번째 순회

2 - 7 - 6(하위)

6 하위는 -> 5-6-11

1차 완료 : 2-7-5-6-11

두번째 순회

(2-7-5-6-11) // 2 // 5 하위

5 하위는 제일 아래부터 시작한다.

4- 9 -?? 해당 노드가 없으면 다음 단계로 넘어간다

(2-7-5-6-11) // 2 // 4 -9 - 5

결론 : 2-7-5-6-11-2-4-9-5

반응형
반응형

3.후위 순회(Postorder) :left-right-root

3

1 2

이번에는 트리를 바꿔서 적용해보자

POST ORDER 첫번째 단계

D - ( E/H) - B

(E/H) 를 분석해보자

(E/H) --> H-E 순서가 된다

첫번째 단계 : D-H-E-B

두번째 단계

두번째 단계를 세부적으로 가보자

F - (G//I) - C

첫번째 단계 (E/H) 와 비슷한 케이스이다

F - I - G - C

결론 : D-H-E-B - F - I - G - C - A

반응형

+ Recent posts