为什么在Windows中我可以在Twisted reactor.callInThread()中运行Kivy app.run(),但不能在OSX中运行?

时间:2014-09-11 10:06:01

标签: macos twisted kivy

似乎我们开发了一个多线程应用程序,我们不能理所当然地认为它在其他操作系统中运行相同。

我正在开发一个Kivy应用程序,但这个Kivy应用程序实际上是从一个扭曲的reactor.callInThread()中启动的。这是代码的片段:

from twisted.internet import reactor
def start_kivy():
    app = SomeKivyApp()
    app.run()

if __name__ == '__main__':
    reactor.callInThread(start_kivy)
    #it will open Kivy main application window in Windows, but not in OSX
    reactor.run()

以上代码段在Windows中运行得非常棒。但在OSX中:Kivy主应用程序窗口没有显示。检查日志文件,没有错。没有警告也没有发生错误。

关于如何解决这个问题的任何想法?或者,你认为我以错误的方式构建了这个应用程序吗?也就是说,我应该使用Kivy应用程序循环而不是对主应用程序循环进行扭曲控制吗?

1 个答案:

答案 0 :(得分:3)

Twisted在不同平台上使用不同的反应器实现 - Windows中使用的实现是特定于Windows的,不在其他平台上使用。这可能就是为什么它在一个平台而不是另一个平台上运行的原因。

使用Kivy和Twisted的正确方法是在上面提供的documentation内容中。 Kivy将在Kivy的EventLoop中迭代Twisted循环。这完美无缺 - 我的Kivy应用程序在很大程度上依赖于Twisted。