如何导入重型模块而不冻结pyqt ui?

时间:2013-12-02 08:53:22

标签: python module pyqt

我有这个沉重的模块,但是当我导入它时,它会冻结我的pyqt ui,导入完成后会弹出ui。

我试过

def background_imports():
    # how do i put zz into global namespace ?
    import xxx.yy as zz

thread = threading.Thread(target=background_imports)
thread.setDaemon(True)
thread.start()

它不起作用

1 个答案:

答案 0 :(得分:0)

您的模块加载在不同的线程命名空间中,因此无法从主线程访问它。

一个选项是查找apipkg helper module,它可以帮助您将导入推迟到第一次需要模块时。

其他是从您的线程返回导入的模块,但我不确定它是否会有一些加速(因为将返回模块的pickle版本,即它将在您的主线程中被取消),或者是错误倾向(从未尝试过甚至测试):

from multiprocessing.pool import ThreadPool

def background_imports():
    import numpy as np
    return np

pool = ThreadPool(processes=1)

async_result = pool.apply_async(background_imports) 
np = async_result.get(3)
print np.mean(1)
# 1.0