我有一个服务器 - 客户端架构。服务器是QtApplication
,包含QThread
。
我正在尝试使用来自QThread的multiprocessing
内置的python打开一个新的客户端进程,并从该新进程中打开一个新的QtApplication
。这样服务器和客户端都运行QtApplications
问题是我收到以下错误:
警告:未在main()线程中创建QApplication。
正在新进程的主线程中创建QApplication,所以我不确定为什么会出现此错误。
答案 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