В настоящее время я тестирую что-то с Threading/workpool; Я создаю 400 потоков, которые загружают в общей сложности 5000 URLS ... Проблема в том, что некоторые из 400 потоков «замораживаются», при просмотре моих процессов я вижу, что + - 15 потоков при каждом запуске замерзают, а через некоторое время close 1 by 1.Python Нити не заканчиваются
Мой вопрос в том, есть ли способ иметь какой-то «таймер»/«счетчик», который убивает поток, если он не закончен через х секунд.
# download2.py - Download many URLs using multiple threads.
import os
import urllib2
import workerpool
import datetime
from threading import Timer
class DownloadJob(workerpool.Job):
"Job for downloading a given URL."
def __init__(self, url):
self.url = url # The url we'll need to download when the job runs
def run(self):
try:
url = urllib2.urlopen(self.url).read()
except:
pass
# Initialize a pool, 400 threads in this case
pool = workerpool.WorkerPool(size=400)
# Loop over urls.txt and create a job to download the URL on each line
print datetime.datetime.now()
for url in open("urls.txt"):
job = DownloadJob(url.strip())
pool.put(job)
# Send shutdown jobs to all threads, and wait until all the jobs have been completed
pool.shutdown()
pool.wait()
print datetime.datetime.now()
вы проводили какой-то анализ, чтобы увидеть, является ли 400 нитей на самом деле улучшения вашей работы? Темы не являются бесплатными; есть некоторые накладные расходы, связанные с каждым потоком, и идеальное количество потоков может быть намного меньше. –