【问题标题】:Issues with Python-Django and PyQt4Python-Django 和 PyQt4 的问题
【发布时间】:2012-08-16 13:30:58
【问题描述】:

已修复此问题已通过将 QApplication 移出 main() 得到修复。

您好,我正在尝试实现一个 Web 服务,它执行给定 URL 的 JavaScript 代码并返回最终的 HTML。我正在使用 PyQt4 进行 JS 处理和 Django 1.4 Web 框架。 问题是:脚本总是在命令邀请中工作,但是当我将它集成到 Django 时,它只在第一次工作,在运行 Django 本地服务器之后,然后在以下执行期间它会发出警告:

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

我得到了错误的结果。 问题是我没有使用任何线程...... 这是我在 Django 上使用的脚本(urlconf 使用给定的 url 导致这个主要功能):

#!/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()

您以前见过这种情况或尝试过类似的事情吗?请帮我提供任何信息谢谢

附:这是我在这里的第一篇文章,希望一切都清楚:)

编辑感谢 Rostyslav,警告消失了,但我仍然遇到销售问题。

【问题讨论】:

  • 我在尝试使用 django 上的 QGIS 服务器生成地图时遇到了同样烦人的问题。在我的 django 项目的 views.py 中创建 QApplication 超越了 main() 而不是在使用 QGIS 生成地图的外部 python 包中创建它使其工作。感谢您的提示!
  • 干杯!我希望一切都适合你。

标签: javascript python django web-scraping pyqt4


【解决方案1】:

实际上你使用线程。

Django 开发服务器默认使用线程。您可以将可选的--nothreading 参数传递给runserver 命令,该命令旨在禁用服务器使用线程:

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

【讨论】:

  • 感谢您的快速回答,我不知道。现在警告消失了,但仍然有同样的问题:第一次执行一切顺利(完全呈现 html),下一次执行部分 html 并且没有 javascript 处理。 (在 shell 中,脚本始终有效)
  • 我现在可以指出的方法是检查服务器上是否执行了任何缓存。
  • 我认为这不是缓存问题,因为我没有两次使用相同的 url,而且无论我先使用哪个 url,响应仅在(重新)启动后的第一次正确django 服务器。我认为这是一个 PyQt 问题,我不知道。无论如何谢谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
相关资源
最近更新 更多