복붙노트

[PYTHON] 장고 배경 작업

PYTHON

장고 배경 작업

Django에서 SQLite 데이터베이스를 몇 분마다 채워야하지만 데이터베이스를 업데이트 할 수있을 때까지 부실 데이터를 제공하고 싶습니다. (즉, 수집 할 데이터를 차단하고 싶지 않으며 차단할 수있는 유일한 시간은 선택 사항이없는 동안 데이터베이스에 잠금이있는 경우입니다.)

나는 또한 별도의 프로그램이나 라이브러리를 설치하고 싶지 않다.

스레딩 문제를 일으키지 않고 여러 모델에서 save ()를 호출 할 수있는 다른 스레드를 설정하는 방법은 무엇입니까?

해결법

  1. ==============================

    1.본격적인 작업 관리 시스템보다는 백그라운드에서 물건을 실행하기위한 간단한 솔루션을 찾고 있다면 django-utils를 살펴보십시오. 여기에는 다른 스레드에서 함수를 비동기 적으로 실행하는 @async 함수 데코레이터가 포함됩니다.

    본격적인 작업 관리 시스템보다는 백그라운드에서 물건을 실행하기위한 간단한 솔루션을 찾고 있다면 django-utils를 살펴보십시오. 여기에는 다른 스레드에서 함수를 비동기 적으로 실행하는 @async 함수 데코레이터가 포함됩니다.

    다음과 같이 사용하십시오.

    from djutils.decorators import async
    
    @async
    def load_data_async():
        # this will be executed in a separate thread
        load_data()
    

    그런 다음 백그라운드 용 load_data_async 함수 또는 실행을 차단하기위한 일반 load_data 함수를 호출 할 수 있습니다.

    @async 데코레이터가 없기 때문에 2.0 이전 버전을 설치하십시오.

    참고 : django-utils를 설치하는 것조차 너무 많으면 간단히 다운로드하여 프로젝트에 필요한 몇 개의 파일을 포함시킬 수 있습니다.

  2. ==============================

    2.셀러리.

    셀러리.

  3. ==============================

    3.독자의 관점에서 원자를 보도록 업데이트해야하는지 여부에 달려 있습니다. 이전 데이터와 새 데이터를 함께 보지 않으려면 데이터를 채우는 사용자 지정 관리 명령을 만들어 cron에서 몇 분마다 실행하십시오.

    독자의 관점에서 원자를 보도록 업데이트해야하는지 여부에 달려 있습니다. 이전 데이터와 새 데이터를 함께 보지 않으려면 데이터를 채우는 사용자 지정 관리 명령을 만들어 cron에서 몇 분마다 실행하십시오.

    원자 단위로 보일 필요가 있다면 django.db.transaction을 통해 하나의 SQLite 트랜잭션에 모든 쓰기를 래핑하면 필요한 잠금이 제공됩니다.

  4. ==============================

    4.존 레먼 (John Lehmann)의 답변에 대한 빠른 업데이트 : django-background-task는 유지 보수가되지 않아 새로운 장고 버전과 호환되지 않습니다. 오래 전에 새로운 기능으로 업데이트하고 확장했으며 Github에서 새로운 하위 호환 패키지를 유지 관리했습니다. 새로운 장고 - 배경 - 작업 응용 프로그램은 PyPI에서 다운로드하거나 설치할 수 있습니다.

    존 레먼 (John Lehmann)의 답변에 대한 빠른 업데이트 : django-background-task는 유지 보수가되지 않아 새로운 장고 버전과 호환되지 않습니다. 오래 전에 새로운 기능으로 업데이트하고 확장했으며 Github에서 새로운 하위 호환 패키지를 유지 관리했습니다. 새로운 장고 - 배경 - 작업 응용 프로그램은 PyPI에서 다운로드하거나 설치할 수 있습니다.

  5. ==============================

    5.Django Background Task는 Ruby Delayed Job 라이브러리를 기반으로 장고를위한 데이터베이스 기반 작업 대기열입니다.

    Django Background Task는 Ruby Delayed Job 라이브러리를 기반으로 장고를위한 데이터베이스 기반 작업 대기열입니다.

    함수를 장식하여 작업을 만듭니다.

    @background(schedule=60)
    def notify_user(user_id):
        # lookup user by id and send them a message
        user = User.objects.get(pk=user_id)
        user.email_user('Here is a notification', 'You have been notified')
    

    비록 당신은 여전히 ​​그 일들을 스케줄하는 무언가가 필요합니다. 일부 이점에는 실패한 작업에 대한 자동 재 시도와 실행중인 작업의 최대 지속 기간 설정이 포함됩니다.

    이것은 다른 종속성을 포함하지만 그 제한이없는 독자에게는 유용 할 수 있습니다.

  6. ==============================

    6.나는 똑같은 문제가 있었지만 문제를 해결하기 위해 샐러리처럼 서비스를하고 싶지 않았다.

    나는 똑같은 문제가 있었지만 문제를 해결하기 위해 샐러리처럼 서비스를하고 싶지 않았다.

    나는 리눅스 시스템에서 posix_spawn을 발견했다. 전체 django 환경에서 실행되는 manage.py 명령을 작성할 수 있습니다. 이 명령은 백그라운드에서이 프로젝트로 실행할 수 있습니다.

    실행 중에 데이터를 다시 웹 사이트에 전달해야하는 경우 memcached를 사용합니다.

    https://github.com/lukedupin/django_posix_spawn

  7. from https://stackoverflow.com/questions/6602761/django-background-task by cc-by-sa and MIT license