如何为操作循环添加多处理或线程? Python
How to Add Multiprocessing or Threads for a loop of operations? Python
我需要一点教程:如何在循环中添加多线程操作?。我有一个调用其他函数的循环,更新 GUI Tkinter 中的进度条和其他操作,这些操作需要 运行 更快,因为我的 GUI 锁定。知道怎么做吗?,例如,如果它,你将如何添加(当然,考虑到与 GUI 有交易,例如在循环中更新进度条。)
def MakeSum(a, b):
s = a + b
return s
def GoDiv(a, b):
div = a / b
return div
def Process():
for i in range(10):
result = MakeSum(i, i)
print("Result of the sum of " + str(i) + " + " + str(i) +
" = " + str(result))
try:
final = GoDiv(result, i)
except:
print("Denominator Is Zero, can't Div")
else:
print("Result of the Div of " + str(result) + " / " + str(i) +
" = " + str(final))
Process()
基本上我的循环是遍历目录和搜索图像。在搜索并使用 PIL 图像打开后,我提取文本 PyTesseract.I 调用一个函数从提取的图像文本中准确搜索我想要的内容。完成后,我剪切图像并使用提取的文本片段重命名。在每次迭代时更新进度条并处理异常,例如上面的代码。
是否可以优化所有这些?。我分析了我正在调用的函数中实现的算法的复杂性,并且只有 O (L),其中 L 是字符串的长度,以找到我想要的。
PS: 代码有点污染,而且很长,我不能把所有的代码都贴在这里。我正在处理中。
提前致谢。
你需要意识到的一件事是,在tkinter中,只有主线程被允许更新屏幕,所以任何其他线程都不能更新进度条。如果你有一个 long-运行 循环,tkinter 在循环完成之前不会更新屏幕,给人一种 GUI 被锁定的印象。处理此问题的方法是调用您的一个小部件的 update_idletasks
方法。
这个想法是 Tk 只在它无事可做时(当它空闲时)更新屏幕。对 update_idletasks
的调用强制它现在执行它会推迟到它的任务闲置了。
当然,在没有看到代码的情况下,我无法就何时调用 update_idletasks
给出具体建议。
希望对您有所帮助。
编辑:阅读此 post:update idletasks when toplevel hasn't the focus Donal Fellows 所说的关于 Tk/tkinter 的任何内容都比我必须说的任何内容都更值得一读。
我需要一点教程:如何在循环中添加多线程操作?。我有一个调用其他函数的循环,更新 GUI Tkinter 中的进度条和其他操作,这些操作需要 运行 更快,因为我的 GUI 锁定。知道怎么做吗?,例如,如果它,你将如何添加(当然,考虑到与 GUI 有交易,例如在循环中更新进度条。)
def MakeSum(a, b):
s = a + b
return s
def GoDiv(a, b):
div = a / b
return div
def Process():
for i in range(10):
result = MakeSum(i, i)
print("Result of the sum of " + str(i) + " + " + str(i) +
" = " + str(result))
try:
final = GoDiv(result, i)
except:
print("Denominator Is Zero, can't Div")
else:
print("Result of the Div of " + str(result) + " / " + str(i) +
" = " + str(final))
Process()
基本上我的循环是遍历目录和搜索图像。在搜索并使用 PIL 图像打开后,我提取文本 PyTesseract.I 调用一个函数从提取的图像文本中准确搜索我想要的内容。完成后,我剪切图像并使用提取的文本片段重命名。在每次迭代时更新进度条并处理异常,例如上面的代码。
是否可以优化所有这些?。我分析了我正在调用的函数中实现的算法的复杂性,并且只有 O (L),其中 L 是字符串的长度,以找到我想要的。
PS: 代码有点污染,而且很长,我不能把所有的代码都贴在这里。我正在处理中。
提前致谢。
你需要意识到的一件事是,在tkinter中,只有主线程被允许更新屏幕,所以任何其他线程都不能更新进度条。如果你有一个 long-运行 循环,tkinter 在循环完成之前不会更新屏幕,给人一种 GUI 被锁定的印象。处理此问题的方法是调用您的一个小部件的 update_idletasks
方法。
这个想法是 Tk 只在它无事可做时(当它空闲时)更新屏幕。对 update_idletasks
的调用强制它现在执行它会推迟到它的任务闲置了。
当然,在没有看到代码的情况下,我无法就何时调用 update_idletasks
给出具体建议。
希望对您有所帮助。
编辑:阅读此 post:update idletasks when toplevel hasn't the focus Donal Fellows 所说的关于 Tk/tkinter 的任何内容都比我必须说的任何内容都更值得一读。