2016-06-29 2 views
-1

현재 데이터베이스에 사이트에 액세스하는 사람들의 IP 주소를 저장하는 django를 사용하여 웹 사이트를 개발 중입니다. 아이디어는 매주 자정에 웹 사이트가 데이터베이스의 모든 항목에 대해 traceroute를 완료 한 다음 파이 게임을 사용하여 목적지까지의 각 홉의 지리적 위치를지도에 매핑한다는 것입니다. 이지도는 이미지로 저장되어 웹 사이트에 표시됩니다.django __init__.py 파일이 파이 게임 코드를 실행하지 않습니다

현재 모든 것이 개별적으로 작동합니다.

초기화 평 파일은 현재 다음과 같은 :

import subprocess, sys 
print "Starting scripts..." 
P = subprocess.Popen([sys.executable, "backgroundProcess.py"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
print "...Scripts started" 

명령 프롬프트에서이 작업을 실행하거나 GUI에서 잘 작동하고, 시간이 경우지도가 제대로 그려 맞아. 그러나 웹 사이트가 시작될 때 스크립트를 실행하면 텍스트가 제대로 인쇄됩니다 (시작 스크립트 ... 및 ... 스크립트 시작됨). 그러나 맵은 그려지지 않습니다. 즉, 내 질문은 : django는 .py 파일에서 할 수있는 일을 제한합니까?

+0

장고는'__init __. py' 파일에서 할 수있는 것에 특별한 제한을 두지 않지만, 파이썬에서와 같이 스크립트 코드를 갖는 것은 매우 나쁜 습관입니다 이것은 패키지의'__init __. py'에서. 또한, 나는이 문제가 장고 (Django) 나 파이 게임 (Pygame)과 어떤 관련이 있는지 보지 못한다. –

+0

내가 어떻게하면 좋을지 어떻게 생각하세요? _init__.py를 사용하여 새지도를 렌더링 할시기가 언제인지 항상 확인하는 스크립트를 시작하는 대신에 더 쉬운 방법이 있습니까? –

답변

0

모듈 최상위 레벨 (패키지의 __init__.py이든 일반 모듈이든)의 코드는이 모듈을 처음 가져올 때 프로세스마다 한 번만 실행됩니다. Django는 장시간 실행되는 프로세스를 사용하기 때문에이 코드는 새로운 프로세스가 시작될 때만 실행됩니다.

예약 된 백그라운드 작업에 대한 가장 간단한 해결책은 Django management command을 작성하고 cron 작업 (또는 시스템의 사용 가능한 스케줄러)에서 호출하는 것입니다. 당신은 실제로 그 서브 프로세스를 필요로하지 않습니다 ...

관련 문제