我将编写一个具有多进程(CPU拥挤)和多线程(IO拥挤)的程序(下面的代码只是一个示例,而不是程序)。
但是当代码满足join()时,它会使程序变成死锁。
我的代码在下面
import requests
import time
from multiprocessing import Process, Queue
from multiprocessing.dummy import Pool
start = time.time()
queue = Queue()
rQueue = Queue()
url = 'http://www.bilibili.com/video/av'
for i in xrange(10):
queue.put(url+str(i))
def goURLsCrawl(queue, rQueue):
threadPool = Pool(7)
while not queue.empty():
threadPool.apply_async(urlsCrawl, args=(queue.get(), rQueue))
threadPool.close()
threadPool.join()
print 'end'
def urlsCrawl(url, rQueue):
response = requests.get(url)
rQueue.put(response)
p = Process(target=goURLsCrawl, args=(queue, rQueue))
p.start()
p.join() # join() is here
end = time.time()
print 'totle time %0.4f' % (end-start,)提前谢谢。
发布于 2016-08-13 02:41:09
我终于找到了原因。正如您所看到的,我从Queue中导入了multiprocessing,所以Queue应该只用于进程,但是我让线程访问代码上的Queue,所以程序后面一定会发生一些未知的事情。
要更正它,只需导入Queue而不是multiprocessing.Queue
https://stackoverflow.com/questions/38803425
复制相似问题