我正在尝试在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)))
答案 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