从QtThread分叉的python进程打开QtApplication

时间:2017-07-20 13:35:20

标签: python qt pyqt pyqt4

我有一个服务器 - 客户端架构。服务器是QtApplication,包含QThread

我正在尝试使用来自QThread的multiprocessing内置的python打开一个新的客户端进程,并从该新进程中打开一个新的QtApplication。这样服务器和客户端都运行QtApplications

问题是我收到以下错误:

  

警告:未在main()线程中创建QApplication。

正在新进程的主线程中创建QApplication,所以我不确定为什么会出现此错误。

1 个答案:

答案 0 :(得分:0)

来自Kovid Goyal的Qoute:

  

不要使用多处理。在unix上,多处理不是线程安全的   它使用fork()而不使用exec(),这意味着它继承了   来自父进程的所有包括锁(在子进程中处于无效状态),文件句柄,全局对象   像QApplication等。就像问题的例证一样   如果将其与标准库一起使用,多处理可能会导致   记录模块,你可以让你的工作进程崩溃,因为   日志记录模块使用锁。

     

毕竟,您对fork()上的QApplication有什么期望?   fork()无法神奇地拥有QApplication对象   重新初始化自己。

     

使用多处理在任何项目的后方咬你   适度复杂。即使在他的时候,我也会把它咬在后面   为grep实现多核替换。而是使用子流程   启动一个工作进程,为它提供一个模块名称,函数和   使用cPickle或json对stdin进行参数然后让它运行   任务。

请参阅:http://python.6.x6.nabble.com/multiprocessing-with-QApplication-td4977972.html