2012-08-16 4 views
1

고정이 문제는 QApplication을 main() 밖으로 이동하여 해결되었습니다.Python-Django 및 PyQt4 관련 문제

안녕하세요, 나는 주어진 URL의 JavaScript 코드를 실행하고 최종 HTML을 제공하는 웹 서비스를 구현하려고합니다. JS 처리 및 Django 1.4 웹 프레임 워크에 PyQt4를 사용하고 있습니다. 문제는 :

WARNING: QApplication was not created in the main() thread 
QObject::startTimer: QTimer can only be used with threads started with QThread 

과 : 스크립트는 항상 초대하지만 통합 할 때 장고에 그것이 경고 다음 실행시 다음, 장고 로컬 서버를 실행 한 후, 처음에만 작동 명령으로 작동 나는 잘못된 결과를 얻었습니다.

#!/usr/bin/env python 

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 
from time import time, sleep 

app = QApplication(sys.argv) 

def wait(app, secs=1): 
    deadline = time() + secs 
    while time() < deadline: 
     sleep(0) 
     app.processEvents() 

def main(url): 
# app = QApplication(sys.argv) 

    web = QWebView() 
    web.load(QUrl(url)) 

    wait(app, 15) 

    return web.page().mainFrame().toHtml().toUtf8() 

당신이 봤어 : 문제는 내가 장고 (urlconf가 주어진 URL이 주요 fonction로 연결)에 사용하고 스크립트를 임의의 스레드에 여기에 ... 입니다 사용하지 않는 것입니다 이전에 또는 비슷한 것을 시도 했습니까? 어떤 정보라도 도와주세요. 감사합니다.

P. 이것은 내 첫 게시물 여기에 모든 것이 분명 희망 :

EDIT 경고는 Rostyslav에게 감사하지만 나는 여전히 판매 문제가 있습니다.

+0

: 당신은 서버에서 사용하는 스레드를 사용하지 않도록하기위한 것입니다 runserver 명령에 옵션 --nothreading 매개 변수를 전달할 수 있습니다. 내 django 프로젝트의 views.py에 QApplication을 작성하는 것은 QGIS로 맵을 생성하는 외부 파이썬 패키지에서 main()을 작성하는 대신 작동합니다. 팁 고마워 ! – Istopopoki

+0

건배! 나는 당신을 위해 모든 것이 잘되기를 바랍니다. – Saksow

답변

1

사실 너는 스레드를 사용합니다.

장고 개발 서버는 기본적으로 스레딩을 사용합니다. 내가 장고에 QGIS 서버 파크 맵을 생성하기 위해 노력하고 같은 성가신 문제가 있었다

python ./manage.py runserver --nothreading ... 
+0

빠른 답변을 주셔서 감사합니다. 이제 경고는 사라졌지 만 여전히 동일한 문제가 있습니다. 첫 번째 실행은 모두 잘되고 (완전히 렌더링 된 HTML), 다음 실행은 부분적인 HTML과 자바 스크립트 처리가 아닙니다. (쉘에서 스크립트는 항상 작동합니다.) – Saksow

+0

제가 지적 할 수있는 방법은 서버에서 캐싱이 수행되는지 확인하는 것입니다. –

+0

동일한 URL을 두 번 사용하지 않기 때문에 캐시 문제라고 생각하지 않습니다. 어떤 URL을 먼저 사용하든 관계없이 처음에는 장고 서버를 다시 시작한 후 처음으로 응답합니다. 나는 이것이 문제가 아니라고 생각하지 않는다. 아무튼 감사 해요 – Saksow