如何为操作循环添加多处理或线程? 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 的任何内容都比我必须说的任何内容都更值得一读。