반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프로그래밍
- 데이터과학
- 프로그래밍언어
- 소프트웨어
- 사이버보안
- 클라우드컴퓨팅
- 빅데이터
- 데이터구조
- 버전관리
- 코딩
- 컴퓨터비전
- 소프트웨어공학
- 딥러닝
- 웹개발
- 데이터베이스
- 알고리즘
- 2
- 자바스크립트
- 네트워크
- 인공지능
- I'm Sorry
- 컴퓨터공학
- 데이터분석
- 컴퓨터과학
- 네트워크보안
- 머신러닝
- 보안
- Yes
- 파이썬
- 자료구조
Archives
- Today
- Total
스택큐힙리스트
넓은 데이터 또는 Flask 세션 당 서비스 연결을 저장하세요. 본문
반응형
작은 Flask 애플리케이션을 작성하고, pyRserve를 사용하여 Rserve에 연결하려고 합니다. 각 세션마다 자체 Rserve 연결을 초기화하고 유지하려고 합니다.
다음과 같은 방식은 작동하지 않습니다:
session['my_connection'] = pyRserve.connect()
연결 개체가 JSON로 직렬화할 수 없기 때문입니다. 반면, 다음과 같은 방식은 작동하지 않습니다:
flask.g.my_connection = pyRserve.connect()
요청 간에 지속되지 않기 때문입니다. 더 어려운 점은 pyRserve가 연결에 대한 식별자를 제공하지 않는 것처럼 보여서 각 요청 전에 올바른 연결을 검색할 수 있는 연결 ID를 세션에 저장하고 사용할 수 없다는 것입니다.
각 세션마다 고유한 연결을 갖도록 하는 방법이 있을까요?
답변 1
import atexit
from multiprocessing import Lock
from multiprocessing.managers import BaseManager
import pyRserve
connections = {}
lock = Lock()
def get_connection(user_id):
with lock:
if user_id not in connections:
connections[user_id] = pyRserve.connect()
return connections[user_id]
@atexit.register
def close_connections():
for connection in connections.values():
connection.close()
manager = BaseManager(('', 37844), b'password')
manager.register('get_connection', get_connection)
server = manager.get_server()
server.serve_forever()
애플리케이션을 시작하기 전에 실행하여 관리자를 사용할 수 있도록 합니다:
python rserve_manager.py
간단한 함수를 사용하여 요청 중 앱에서 이 매니저에 접근할 수 있습니다. 이때 세션에서 user_id 값이 있다고 가정합니다 (예를 들어 Flask-Login이 이 값을 제공합니다). 결과적으로 이렇게 함으로써 rserve 연결은 사용자마다 고유하게 되고 세션마다 고유하지 않게 됩니다.
from multiprocessing.managers import BaseManager
from flask import g, session
def get_rserve():
if not hasattr(g, 'rserve'):
manager = BaseManager(('', 37844), b'password')
manager.register('get_connection')
manager.connect()
g.rserve = manager.get_connection(session['user_id'])
return g.rserve
뷰 내에서 이를 접근하세요:
result = get_rserve().eval('3 + 5')
이로써 시작할 수 있지만, 주소와 비밀번호를 하드코딩하거나 관리자에 대한 연결을 놓치는 등 개선할 수 있는 부분이 많이 있습니다. 이 코드는 Python 3로 작성되었지만 Python 2에서 작동할 수 있습니다.
답변 2
플라스크 세션에서 큰 데이터 저장 또는 서비스 연결 어떤 걸 선택해야 할까?플라스크(Flask)는 파이썬으로 작성된 웹 애플리케이션을 구축하기 위한 강력한 프레임워크입니다. 이 프레임워크에서는 세션(Session) 기능을 제공하여 사용자의 상태나 데이터를 유지할 수 있습니다. 그렇다면 플라스크 세션을 사용하여 큰 데이터를 저장하거나 서비스 연결을 유지하는 것 중 어떤 것을 선택해야 할까요?
먼저, 플라스크 세션을 사용하여 큰 데이터를 저장하는 것은 매우 유용할 수 있습니다. 세션은 쿠키(Cookie)를 사용하여 사용자의 브라우저에 데이터를 저장하므로, 해당 데이터를 지속적으로 사용할 수 있습니다. 그러나 큰 데이터를 세션에 저장하기 위해서는 많은 리소스를 사용하게 될 수 있습니다. 세션에 저장된 데이터는 서버 메모리에 로드되므로, 메모리 부족 문제가 발생할 수 있습니다. 또한, 세션 데이터의 크기는 웹 브라우저에서 사용 가능한 쿠키의 제한에 따라 제한될 수 있습니다. 그래서 많은 양의 데이터를 세션에 저장할 경우, 성능 저하와 함께 불안정성 문제가 발생할 수 있습니다.
따라서 큰 데이터를 저장해야 할 경우, 플라스크 세션보다는 서비스 연결을 유지하는 것이 더 나은 선택일 수 있습니다. 서비스 연결을 유지하는 경우, 사용자의 데이터는 서버에 저장되어 세션에 비해 더 많은 공간을 활용할 수 있습니다. 또한, 서비스 연결은 사용자가 필요할 때만 데이터를 전송하므로, 메모리 부족 문제가 발생하지 않습니다. 사용자가 로그인 정보나 장바구니와 같은 데이터를 계속해서 사용해야 하는 경우, 서비스 연결을 유지하는 것이 더 안정적이고 확장 가능합니다.
하지만 한 가지 주의해야 할 점은 서비스 연결을 유지하기 위해 사용되는 리소스가 있을 수 있다는 것입니다. 따라서 사용자 수가 많고 동시에 많은 데이터를 요청하는 경우, 서버의 처리 속도에 영향을 미칠 수 있습니다. 이는 효율적인 서버 관리와 적절한 서버 설정이 필요함을 의미합니다.
결론적으로, 플라스크 세션을 사용하여 큰 데이터를 저장하는 것은 성능과 안정성 문제를 유발할 수 있습니다. 따라서 큰 데이터를 저장해야할 경우, 서비스 연결을 유지하는 것이 더 나은 선택일 수 있습니다. 하지만 이는 서버 리소스와 성능을 적절히 관리해야 한다는 측면에서 중요합니다. 사용자의 요구사항과 애플리케이션의 특성을 고려하여 적절한 방법을 선택하고 구현하는 것이 중요합니다.
(Word count: 405)
반응형
Comments