파이썬 응용 프로그램의 많은 sqlalchemy 객체를 기반으로 큰 객체 (재생 영역)가 있습니다.uwsgi 매핑 요청을 처리합니다.
간단한 요청 (예 : 플레이어 이동)마다이 개체를 만들어야하며 리소스 집약적입니다. 글로벌 변수에 준비된 객체를 캐시 할 수 있습니다.
하지만 단일 uwsgi 스레드를 사용하는 경우에만 작동합니다.
cache = {}
def applicatio(field_id):
global cache
if field_id not in cache.keys():
field = get_field(field_id)
cache[field_id] = field
field.move_player()
내 개체가 64KB보다 커서 uwsgi.cache
을 사용할 수 없습니다. 그리고 데이터베이스 연결을 기반으로 객체에 좋은 기능이 있는지 확신 할 수 없습니다.
또 다른 문제가 있습니다. 두 요청이 서로 다른 프로세스에 동시에 도착하면 충돌이 발생할 수 있습니다.
따라서 요청을 동일한 스레드에 매핑하려고합니다. nginx에서 사용할 수 있습니다 hash $arg_field_id;
하지만 다른 소켓으로 많은 uwsgi 프로세스를 생성해야합니다. IMHO 나쁜 생각이야.
uwsgi가이 논리를 실현할 수 있습니까? 또는
프로세스간에 개체를 공유하는 방법을 아는 사람이 있습니까? 여기에 설명 된대로 당신은 단지 조정을 원하는
고마워요! 나는 부주의했다. 그리고이 문서를 읽는다. 나는 이것을 저녁에 시험 할 것이다. –
흠. uwsgi.cache가 내 개체를 캐시 할 수 없다고 생각할 때 나는 옳았다. –
왜? 모든 얼룩을 저장할 수 있습니다. 분명히 복잡한 파이썬 개체를 저장하려면 다른 캐싱 서버와 마찬가지로 피클 링/마샬링/직렬화를 수행해야합니다. – roberto