1.스레드(Thread) 장.단점 설명
파이썬 스레드는 컴퓨터 프로그램에서 실행할 수 있는 하나 이상의 실행 흐름입니다. 각 스레드는 프로세스 내에서 병렬로 실행되며, 각 스레드는 자체 스택과 CPU 레지스터를 가집니다. 이는 프로세스 내에서 동시에 실행되는 여러 작업을 가능하게 합니다.
파이썬에서 스레드는 "threading" 모듈을 사용하여 생성할 수 있습니다. 스레드를 생성하려면 threading.Thread() 함수를 호출하고 실행할 함수를 전달합니다. 그런 다음 생성된 스레드 객체의 start() 메소드를 호출하여 스레드를 실행합니다.
스레드는 일반적으로 병렬로 실행되므로, 다른 스레드와 공유하는 데이터에 대한 동기화 문제를 처리해야 합니다. 이를 위해 파이썬은 threading.Lock, threading.RLock 및 threading.Condition과 같은 동기화 기본 구조를 제공합니다. 이러한 도구를 사용하여 스레드 간의 데이터 공유를 안전하게 처리할 수 있습니다.
스레드를 사용하면 여러 작업을 동시에 실행할 수 있으므로, 시간이 오래 걸리는 작업을 백그라운드에서 처리하거나 네트워크 호출과 같은 I/O 작업을 관리하는 데 유용합니다. 그러나 스레드를 남용하면 CPU 자원과 메모리 사용량이 증가하므로, 스레드를 사용할 때는 적절한 수의 스레드를 사용하는 것이 중요합니다.
정리하면..
장점
1. 병렬성: 스레드는 병렬로 실행될 수 있으므로, 여러 작업을 동시에 실행할 수 있습니다. 이는 시간이 오래 걸리는 작업이나 I/O 작업을 처리하는 데 유용합니다.
2.빠른 응답 시간: 스레드는 프로그램의 응답 시간을 높일 수 있습니다. 예를 들어, 사용자 인터페이스 스레드는 사용자가 애플리케이션과 상호작용할 때마다 반응적으로 동작하여 사용자 경험을 향상시킵니다.
3.자원 공유: 스레드는 프로세스 내에서 데이터와 자원을 공유할 수 있습니다. 이는 메모리와 CPU 자원을 더 효율적으로 사용할 수 있습니다.
4.경량화: 스레드는 프로세스 내에서 경량화된 실행 단위입니다. 따라서 프로세스에 비해 스레드를 생성하고 관리하는 데 더 적은 시간과 메모리가 필요합니다.
단점
1. 경쟁 상태: 스레드는 동시에 실행되므로 데이터 공유 문제와 경쟁 상태 문제가 발생할 수 있습니다. 이는 잘못된 동기화 또는 락의 사용 부재로 인해 발생할 수 있습니다.
2. 교착 상태: 스레드가 다른 스레드가 사용 중인 자원을 대기하는 동안 일시 중지될 수 있습니다. 이로 인해 모든 스레드가 다른 스레드를 대기하고 있는 경우, 교착 상태가 발생할 수 있습니다.
3. 자원 공유 문제: 스레드 간의 데이터 공유는 적절한 동기화를 사용하지 않으면 예기치 않은 결과를 초래할 수 있습니다. 이는 데이터 일관성과 성능 문제를 유발할 수 있습니다.
4. 메모리 누수: 스레드를 관리하는 데 필요한 메모리와 자원이 증가할 수 있습니다. 이는 메모리 누수와 같은 문제를 초래할 수 있습니다.
2. 스레드 활용 비트 코인 선물 가격 실시간 데이터 받는 코드
import json
import threading
import websocket
from datetime import datetime
def parse_data(msg):
"""파싱된 메시지에서 필요한 정보 추출"""
event_type = msg['e']
event_time = datetime.fromtimestamp(msg['E'] / 1000.0).strftime('%Y-%m-%d %H:%M:%S')
symbol = msg['s']
mark_price = msg['p']
funding_rate = msg['r']
return f"{event_type} - {symbol} mark price: {mark_price} (funding rate: {funding_rate}) at {event_time}"
def on_message(ws, message):
"""웹소켓으로부터 메시지가 수신될 때 호출되는 콜백 함수"""
if isinstance(message, bytes):
message = message.decode('utf-8')
# 'markPriceUpdate' 이벤트만 처리
if json.loads(message)['e'] == 'markPriceUpdate':
print(parse_data(json.loads(message)))
def on_close(ws):
"""웹소켓 연결이 종료될 때 호출되는 콜백 함수"""
print("### closed ###")
def on_error(ws, error):
"""웹소켓 에러가 발생할 때 호출되는 콜백 함수"""
print(error)
def start_socket(symbol):
"""웹소켓 연결 시작"""
endpoint = f"wss://fstream.binance.com/ws/{symbol.lower()}usdt@markPrice@1s"
ws = websocket.WebSocketApp(endpoint,
on_message = on_message,
on_close = on_close,
on_error = on_error)
ws.run_forever()
if __name__ == "__main__":
# 비트코인 선물 시장에서 BTCUSDT 심볼의 마크 프라이스와 펀딩 레이트를 실시간으로 받아옵니다.
symbol = "BTC"
# 웹소켓 연결을 위한 스레드 시작
t = threading.Thread(target=start_socket, args=(symbol,))
t.start()
아래와 같이 출력 됩니다@@

'Python 끄적 > 가상화폐 자동화 프로그램' 카테고리의 다른 글
#9.비트코인 선물 자동구매 프로그램 - Websocket(양방향통신) (0) | 2023.03.29 |
---|---|
#8.비트코인 선물 자동구매 프로그램 - 선물1분봉 + RSI/MACD/이평선 => 엑셀 파일로 출력 (1) | 2023.03.27 |
#7.비트코인 선물 자동구매 프로그램 - 선물시장 데이터 가져오기 (0) | 2023.03.25 |
#6.비트코인 선물 자동구매 프로그램 - python-binance Module 이해하기 (0) | 2023.03.25 |
#5.비트코인 선물 자동구매 프로그램 - (웹)선물 주문 + Python으로 주문 내역 확인 하기 (0) | 2023.03.24 |