Я собираюсь написать программу с несколькими процессами (переполненную процессором) и многопоточными (IO-переполненными). (Код ниже только образец, а не программа)python multiprocessing.Process's join не может закончиться
Но когда код соответствует 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,)
Заранее спасибо.
Что вы сделали, чтобы решить эту проблему? Вы посмотрели на это? https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Process.join – Munchhausen
Вау, это странно. Удаление любой строки в 'urlsCrawl' устраняет тупик, но почему? –
@Munchhausen Да, я видел это раньше, но я не нашел ничего плохого в своем коде. Если я удалю команду rQueue.put(), она работает хорошо, и я также обнаружил, что если rQueue пуст, он также работает хорошо. Возможно, проблема связана с Queue.put(). –