python- 进程中的无限循环导致 kivy 实例产生 forverer

python- infinite loop in a process causes kivy instances to spawn forverer

我有一个 kivy 应用程序,它使用多处理来生成具有无限循环的进程。

代码在 ubuntu 上运行良好 - 因为 linux 默认使用分叉。问题是在 windows OS 中,生成是默认设置,因此每次迭代,该过程从头开始执行代码,创建无限的 kivy GUI 实例。

我该如何解决这个问题?这就是我开始我的过程的方式:

def f(x):
    while True:
        print(x)

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()

注意:我不使用 p.join() 因为函数永远不会结束。

问题由 this kivy issue log

解决

总结

关于windows的问题(不是Linux),当使用multiprocessing.Manager时,kivy会重复创建一个新的window

解决方案

[添加冻结支持] (https://docs.python.org/2/library/multiprocessing.html#multiprocessing.freeze_support) 在开始多重处理之前

例子

if __name__ == '__main__':
    freeze_support()
    Process(target=f).start()

其他背景

Python multiprocessing is different under Linux and Windows 由 Mohammed Baashar 推荐(见评论)

如果仅添加 freeze_support 失败,您需要在 if name == main guard 下导入 kivy 之前导入多处理和冻结支持。

更多细节在这里: https://github.com/kivy/kivy/issues/4744