如何使用多进程或多线程客户端在python中获得工作进度条?

时间:2016-08-21 05:56:22

标签: multithreading python-2.7 multiprocessing progress-bar pygobject

这是基本想法。

在阅读python文档中的所有内容时,我无法理解它们。理解它太过分了。

有人可以解释一下如何使用多线程(或多进程)客户端获得工作进度条吗?

还是有其他方式来更新"进度条没有锁定程序的GUI?

我也读了一些关于" I / O"当这些类型的客户端同时尝试访问文件时出现错误。当应用程序没有正确调用多线程库时,X服务器错误。 如何避免'

这次我没有编写代码,我不想以僵尸程序或类似的东西结束(然后迫使PC关闭,我不想破坏宝贵的数据...... )。我需要先了解我在做什么!

1 个答案:

答案 0 :(得分:2)

下面的内容可能会让你开始? - 我试图尽可能地注释来解释这个过程。

from Tkinter import *
from Queue import Queue
import ttk, threading
import time

queue = Queue()
root = Tk()

# Function to do 'stuff' and place object in queue for later #
def foo():
    # sleep to demonstrate thread doing work #
    time.sleep(5)
    obj = [x for x in range(0,10)]
    queue.put(obj)

# Create thread object, targeting function to do 'stuff' #
thread1 = threading.Thread(target=foo, args=())

# Function to check state of thread1 and to update progressbar #
def progress(thread, queue):
    # starts thread #
    thread.start()

    # defines indeterminate progress bar (used while thread is alive) #
    pb1 = ttk.Progressbar(root, orient='horizontal', mode='indeterminate')

    # defines determinate progress bar (used when thread is dead) #
    pb2 = ttk.Progressbar(root, orient='horizontal', mode='determinate')
    pb2['value'] = 100

    # places and starts progress bar #
    pb1.pack()
    pb1.start()

    # checks whether thread is alive #
    while thread.is_alive():
        root.update()
        pass

    # once thread is no longer active, remove pb1 and place the '100%' progress bar #
    pb1.destroy()
    pb2.pack()

    # retrieves object from queue #
    work = queue.get()
    return work

work = progress(thread1, queue)
root.mainloop()

希望这会有所帮助。让我知道你的想法!