使用python重命名具有单独线程的文件夹中的每个文件

时间:2014-06-13 17:48:43

标签: python multithreading operating-system python-multithreading

我正在尝试在python中学习线程。

到目前为止,这是我写的一块简单的蛋糕:

path = "/Users/userName/Desktop/temp/bluetooth"
allImages = tuple(img for img in os.listdir(path) if img.endswith(".JPG"))

def renameFile(index, path, fileName, renameTo):
    print "%d. Renamed: %s to %s" % (index, fileName, renameTo)
    os.rename(os.path.join(path, fileName), os.path.join(path, renameTo))
    return

def threadedRename():
    for  ind, img in enumerate(allImages):
        t = threading.Thread(target=renameFile, args=(ind, path, img, "%s%s" % (ind, img)))
        t.start()
threadedRename()

以上代码是否通过每个线程同时重命名文件?它是否有意义,如果有,我如何检查上面的代码和下面的代码重命名时间之间的差异?

# perform rename one by one
for ind, img in enumerate(allImages):
    print "Renaming: %s" % img
    os.rename(os.path.join(path, img), os.path.join(path, "%s%s" % (ind, img)))

2 个答案:

答案 0 :(得分:0)

我不认为在这里为每个文件创建一个线程是值得的。重命名操作不是很长,以证明每个文件创建一个线程的开销。也许如果你有很多文件,那么创建一些线程并让它们分批完成工作是值得的。

为了让你的节目计时器使用time.clock()

fromTime = time.clock()
#do operations
toTime = time.clock()
print toTime - fromTime

答案 1 :(得分:0)

作为一个学习线程的编程练习,这没有什么不妥,但它不是一个很好的实际使用线程。这些是操作系统和存储硬件要优化的东西,在物理磁盘上,你必须违反物理定律才能同时完成它们。

关于计时器代码的重要事项是“#do operations”部分。你需要在创建线程时创建一个线程列表,然后做这样的事情来获得它们运行的​​实际时间:

# start timer

# start all the threads
for t in renameThreads:
    t.start

# wait for all threads to finish
for t in renameThreads:
    t.join()

# now you can stop the timer