【问题标题】:UrlRequest hanging on GETUrlRequest 挂在 GET 上
【发布时间】:2019-11-07 01:28:33
【问题描述】:

我正在尝试运行 UrlRequest,但 Kivy 似乎不想返回。它挂起,直到我强制退出应用程序。我可以通过 Rested 运行相同的查询,并且可以验证 URL/标头是否正确。

我是 Mac OS 的新手,它被防火墙阻止了吗?有没有我可以查看的日志?

代码

server_headers = {'Authorization': 'Bearer ' + str(self.hass_server_token), 'content-type': 'application/json'}                
request = UrlRequest(str(self.hass_server_url) + ':' + str(self.hass_server_port) + '/api/states', req_headers= server_headers, verify=False)
while not request.is_finished:
    Clock.tick()
self.hass_all_states = request.result

谢谢

【问题讨论】:

  • kivy 内部请求模型运行良好kivy.org/doc/stable/api-kivy.network.urlrequest.html 它确保在执行请求时不会阻塞主线程。
  • PalimPalim,感谢您的帮助。我正在使用 Kivy 的入职 UrlRequest。
  • 你能把它做成一个最小的例子,包括所有的导入等。理想情况下,我想复制并粘贴你的代码。在我的机器上运行它,然后看看有什么问题。

标签: python macos kivy


【解决方案1】:

Kivy 的UrlRequest 默认是线程化的。这意味着您需要为请求成功完成指定回调函数。它在后台运行,因此不会阻止您的应用程序正在执行的任何其他操作,这就是您必须在 UrlRequest 调用中指定回调函数的原因,因此它知道完成后要做什么。通过将回调函数的名称传递给UrlRequest 中的on_success 参数来执行此操作。类似地,您可以为on_erroron_failure 指定回调函数。

例子:

def success_callback(self, *args):
    print(args)

然后在您的代码中:

UrlRequest('some_server_url', on_success=self.success_callback)

(您不需要像以前那样将变量分配给UrlRequest)。

【讨论】:

  • 线程在 MacO 上的行为是否显式不同? REST 调用在 Windows 和 Android 上运行良好,但在 Mac 上却不够奇怪。我将尝试使用 on_success 方法来查看是否有任何不同。感谢您的帮助。
  • 我不知道有什么明显的区别 - 我自己使用 MacOS,它对我来说非常好用。不过肯定需要使用on_success 参数。如果还是不行,试试on_erroron_failure函数,打印你得到的args,它会告诉你是否有错误。
猜你喜欢
  • 1970-01-01
  • 2012-12-20
  • 2014-10-26
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多