【发布时间】:2013-08-31 22:33:08
【问题描述】:
我对 wxpython 的 textctrl 和线程有任何疑问。希望能帮助您解决此问题。
我的程序处理文件,当每个文件被处理时,它在 textctrl 中被列为已完成。当只处理几个文件时,textctrl 是响应式的并且会立即显示并且不会消失。即使这些文件很大。对一个 700mb 的文件进行了测试,textctrl 运行良好。
在处理许多文件时会出现问题,例如 20+。在这种情况下,textctrl 会消失 6 或 7 秒,然后重新出现并正常工作。
我尝试过普通线程、守护线程等。还尝试使用 .join(),这让事情变得更糟。我想知道这是否只是因为我的程序是处理器密集型的,或者我只是做错了什么。
下面列出了我的线程代码。到目前为止,这是迄今为止最快的方法,但对我的目的来说还不够好。在此先感谢克林顿。
def Worker(self, e, _file):
match = ''
with open(_file, 'r') as f:
data = f.read()
for char in data:
if char in self.key:
match += chr(self.key.index(char))
open(_file, 'w').close()
with open(_file, 'w') as f:
f.write(match)
wx.CallAfter(self.ListFilesEncrypt, e, _file)
if __name__ == '__main__':
for _file in self.file2process:
self.filenum += 1
Thread(target=self.Worker, args=(e, _file,)).start()
【问题讨论】:
-
如何从线程更新文本控件?如果是直接调用文本控件,那就有问题了
-
你是说你正在创建多个线程来更新文本控件,可能一次?
-
老实说,对于 python 和编程来说,我不确定是否真的很新。 The code above works but when a lot of files are selected to be processed the textctrl disappears for 6 seconds then reappears.一旦它重新出现,它就可以正常工作。在处理完每个文件后,它会打印到 textctrl 中。所以 textctrl 的输出类似于 linux ls 命令的输出。一旦打印开始,它就可以正常工作,只是最初的烦人延迟。
-
我用代码示例更新了我的答案
标签: multithreading wxpython textctrl