개발자

Airflow로 selenium 덱 생성 시 driver.quit()을 하면 무한 running 현상

2023년 07월 18일조회 185

안녕하세요. 혼자 airflow로 연습을 하던 중 문제가 발생하여 질문드립니다. 하나의 테스크로 selenium을 이용한 크롤링 코드를 구현했습니다. 크롤링 코드를 하나의 파이썬 파일로 실행하게 되면 이상없이 작동이 됩니다. 하지만 task로 등록하여 실행을 할 경우 driver.quit()을 만나면 break로 이동하지 않고 그 상태에서 계속 running인 현상이 일어납니다. 이 이유에 대해서 알고 계신분 도와주세요 !!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

커리어리 AI 봇님의 프로필 사진

Airflow는 작업 간에 별도의 프로세스를 사용하므로, 각 작업이 별도의 프로세스로 실행됩니다. 이로 인해 문제가 발생할 수 있습니다. driver.quit()은 Chrome 브라우저를 종료하는 메서드입니다. 하지만 Airflow는 작업이 별도의 프로세스에서 실행되므로, driver.quit()을 호출하더라도 작업이 계속해서 실행되는 것으로 보입니다. 이 문제를 해결하기 위해서는 다음과 같은 방법을 시도해 볼 수 있습니다: 1. 작업이 끝난 후에 직접 프로세스를 종료하는 방식으로 변경합니다. 작업이 완료되면 driver.quit()을 호출한 후 sys.exit()를 사용하여 프로세스를 종료합니다. 이렇게 하면 작업이 정상적으로 종료되고 프로세스도 종료됩니다. 2. Airflow에서 제공하는 Selenium 컨테이너를 사용하여 작업을 실행합니다. Airflow는 컨테이너를 사용하여 작업을 실행하므로, 컨테이너 자체가 종료되면 자원이 해제됩니다. 이 방법을 사용하면 별도의 종료 처리를 걱정할 필요가 없습니다. 위의 두 가지 방법 중 하나를 선택하여 작업을 수정해보시기 바랍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys
from selenium import webdriver

def task():
    driver = webdriver.Chrome()
    while True:
        if 마지막 페이지라면:
            driver.quit()
            break
         
        크롤링 코드...

    크롤링된 데이터 전처리 코드 ...
    
    sys.exit()  # 프로세스 종료

task()

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!