这是我昨天上传的类似来源,但由于您的帮助解决了一些问题。
问另一个关于同样问题的问题有点羞耻:(
但是虽然我整天思考问题是什么,但我没有找到。所以,
它看起来不错并且可以工作,但问题是,某些线程很长一段时间都不会自行终止。
我什至等了 10 分钟,但 6 个线程仍然存在。
这是我开始学习编程以来最大的谜团......
你能教我它有什么问题吗?
import os
import threading
import multiprocessing
def finder(path, q, done):
for root, dirs, files in os.walk(unicode(path)):
for dirname in dirs:
if target in dirname.lower():
q.put(os.path.join(root,dirname))
for name in files:
if target in name.lower():
q.put(os.path.join(root,name))
#print "good bye",threading.current_thread()
#print threading.active_count()
done.put(1)
def printer(q,done,worker_count):
total = 0
while 1:
try: done.get_nowait()
except: pass
else: total += 1
try: tmp=q.get(timeout=1)
except: pass
else: print tmp
if total == worker_count:
break
if __name__ =="__main__":
results = multiprocessing.Queue()
done = multiprocessing.Queue()
root, dirs, files = os.walk(u"C:\\").next()
for dirname in dirs:
if target in dirname.lower():
q.put(os.path.join(root,dirname))
for name in files:
if target in name.lower():
q.put(os.path.join(root,name))
thnum=len(dirs)
target=raw_input("what you wanna get\n")
for i in xrange(thnum):
full_path = os.path.join(root, dirs[i])
t=threading.Thread(target=finder,args=(full_path, results, done,))
t.start()
p=multiprocessing.Process(target=printer,args=(results,done,thnum,))
p.start()
p.join()