내 목표 움직이지 않는 이유 :ThreadPool이가 TimeoutError 후 다음
- 는 요청을 사용하여 확인하는 웹 사이트 목록을 통해 이동을. 이것은
apply_job
에서 이루어집니다.
내 문제 : job_pool.next
가 호출되면, 몇 웹 사이트에 오류가있는 대신 오류를주는, 그들은 단지 거기 서서, 심지어 TimeoutError
를 제공하지 않습니다
- . 그래서
next
함수에서 10 초의 타임 아웃을 사용하고 있습니다. 이 시간 초과는 잘 작동하지만TimeoutError
예외가 발생하면next
은 다음 웹 사이트가 양호하더라도 다음 시간 동안 계속 예외를 발생시킵니다. 그것은 다음 항목으로 이동하지 않고 동일한 루프를 반복하는 것 같습니다. imap
과imap_unordered
으로 시도했지만 그 차이는 없습니다. 여기
내 코드 :
def run_check(websites):
""" Run check on the given websites """
import multiprocessing
from multiprocessing.pool import ThreadPool
pool = ThreadPool(processes=JOB_POOL_SIZE)
try:
job_pool = pool.imap_unordered(apply_job, websites)
try:
while True:
try:
res = job_pool.next(10)
except multiprocessing.TimeoutError:
logging.error("Timeout Error")
res = 'No Res'
csv_callback(res)
except StopIteration:
pass
pool.terminate()
except Exception, e:
logging.error("Run_check Error: %s"%e)
raise
나는 웹 사이트를 확인하는 res = requests.get(url, timeout=10)
를 사용합니다. 이 시간 초과는이 문제에 대해 작동하지 않습니다.
테스트하려면 다음과 같이 문제를 만드는 웹 사이트 (매번이 아닌 매우 자주) : http://www.kddecorators.netfirms.com, http://www.railcar.netfirms.com.
이 웹 사이트와 다른 점을 알 수는 없지만 사용하지 못하더라도 실시간으로 간주되지 않으므로 잠시 동안 바이트를 계속 보내고 있습니다.
누구나 아이디어가 있다면 크게 환영 할 것입니다. 지금은 며칠 동안 저것에 매달 렸습니다. 심지어 future
과 async
을 시도했지만 필요한 예외를 발생시키지 않았습니다.
고마워요!