2017-12-07 12 views
1

나는 csv 파일에 데이터 행을 작성합니다 내 장고 응용 프로그램에 몇 가지 기능을 추가 할 계획입니다 :Celery는 Django의 비동기 파일 쓰기 기능에 필요합니까? 특정 뷰가 호출 될 때

session_dict = collectUserDataFromRequest(request) #....collect parameters from request 

    if os.path.isfile(filename): 

     with open(filename, 'a') as csv_file: 
      a = csv.DictWriter(csv_file,session_dict.keys()) 
      a.writerow(session_dict) 
      csv_file.close() 

    else: 

     with open(filename, 'w') as csv_file: 
      w = csv.DictWriter(csv_file,session_dict.keys()) 
      w.writeheader() 
      w.writerow(session_dict) 
      csv_file.close() 

    # then proceed to render the html 

나는 잠재적 인 경쟁 상태 때 다루고 직면하고 문제를 여러 사용자가 동시에 내 앱에 액세스하고 있습니다. 데이터를 임의의 순서로 CSV 파일에 추가 할 수 있지만 일부 사용자는 CSV 파일에서 잠금이 해제 될 때까지 대기하는 동안 뷰가로드 될 때까지 기다리지 않는 것이 좋습니다. 따라서 백그라운드에서 실행할 수있는 파일에 쓸 문자열 데이터의 비동기 대기열이 좋은 해결 방법이라고 생각합니다.

Celery는 장고 앱에 비동기 프로세스를 추가하는 좋은 프레임 워크라고 들었습니다. 그러나 여러 자습서를 살펴보면 Redis와 같은 추가 프레임 워크가 일반적으로 필요하다는 것을 알게되었습니다. 나는 이것이 내가 성취하고자하는 것에 과잉이라고 걱정한다. Django 프로덕션 환경에서 멀티 스레드를 사용하는 데있어 다른 단점이 있는지 또는 here과 같이 표준 다중 처리 접근법을 사용하여 해결할 수 있습니까?

답변

1

첫 번째 포인트 : 동일한 파일에 쓰려고하는 동시 요청을해서는 안됩니다. 사용 사례에 따라 동시 액세스를 처리하거나 사용자 별 파일을 처리하는 방법을 알고있는 적절한 관계형 데이터베이스에 데이터를 저장해야합니다.

두 번째 포인트 : 아니요, 비동기 작업을 위해 반드시 샐러리가 필요하지는 않지만 quite a few other solutions이 있습니다.