2017-12-12 20 views
1

프로덕션 설정을 위해 uWSGI + Nginx로 포장 된 Python 플라스크 API가 있습니다. 4 Nginx 작업자와 작업자 당 1 스레드가 다음과 같이 구성되어 있습니다. 프로세스 = 4 스레드 = 1uWSGI 동일한 JSON 파일에 작성하는 작업자

API 게시를 발행하면 게시물이 코드의 다른 부분에서 json 파일을 쓰고 읽습니다.

병렬로 여러 API 요청을 발행하면 예상대로이 4 명의 Nginx 작업자에게 배포됩니다. 그리고 그들은 진행하고 요청을 병렬로 처리합니다. 때로는 여러 프로세스가 동일한 파일을 읽고 쓰는 중일 때 json ValueErrors가 발생합니다.

이 시나리오를 어떻게 극복합니까? 이것은 내 API 내에서 다중 처리가 아닙니다. 파이썬의 멀티 프로세싱 Lock을 json 업데이트 코드 내에서 사용하면 문제가 해결되지 않습니다.

json 파일을 한 번에 하나의 작업자로 업데이트 할 수 있기를 원합니다. uwsgi 직원들에게 자물쇠를 공유 할 수있는 방법이 있습니까?

+0

json 파일을 "쓰고 읽음"이라고 할 때 디스크를 의미합니까? 독자가 이해할 수있는 경우 독자에게 도움이 될 수 있으며 읽고 쓰는 곳의 예제 코드를 제공하여 더 나은 상황을 제공 할 수 있습니다. – SteveJ

답변

0

이 모든 다른 프로세스는 다른 pid해야합니다, 그래서 당신은 왜 사용하지 않는 것을 JSON 읽기/쓰기의 파일 이름으로.

import os 
pid = os.getpid() 
f = open(pid,'w+') 

는 원치 않는 조언 : 나는 보기 엔 당신이, 함수/클래스 사이의 값을 전달하려고 또는 일부 레디 스에서 설정/파일 읽기를 사용하는 프로그램 사이의 데이터 교환 방법으로를 작성하지 않는 것이 좋습니다 것입니다 mechasim을 캐싱하는 것 (느리게). 그러나 파일 쓰기 및 읽기는 가장 느립니다.