我正在编写一个提供 PySide UI 的程序。在其中,启动了一个线程,该线程设置了一系列应该在后台运行的功能,同时 UI 显示一个进度条。
我正在使用 Python 3 的 backportconcurrent.futures
for Python 2.7 进行多线程处理。
UI 方法如下所示:
def doPostprocess(self):
with ThreadPoolExecutor(max_workers=1) as executor:
future = executor.submit(othermodule.func)
while not future.done():
QtGui.qApp.processEvents()
self.progressbar.setValue(1)
time.sleep(0.001)
self.progressbar.hide()
这是我最小的othermodule.func
样子:
def func():
logger.info("Some informational message")
time.sleep(15)
print "And we are done here"
“我们在这里完成了”永远不会打印到标准输出,但future
对象表示它在调用后立即完成logger.info
。
有趣的是:当我将调用更改为 时logger.debug
,一切都按预期工作,即func
记录、休眠 15 秒然后打印到标准输出,而主线程一直在更新其进度条。无论为应用程序设置什么日志级别,都会发生这种情况。