我有这个沉重的模块,但是当我导入它时,它会冻结我的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()
它不起作用
答案 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