개발자
안녕하세요. 혼자 airflow로 연습을 하던 중 문제가 발생하여 질문드립니다. 하나의 테스크로 selenium을 이용한 크롤링 코드를 구현했습니다. 크롤링 코드를 하나의 파이썬 파일로 실행하게 되면 이상없이 작동이 됩니다. 하지만 task로 등록하여 실행을 할 경우 driver.quit()을 만나면 break로 이동하지 않고 그 상태에서 계속 running인 현상이 일어납니다. 이 이유에 대해서 알고 계신분 도와주세요 !!
1def task():
2 driver = webdriver.Chrom()
3 while True:
4 if 마지막 페이지라면:
5 driver.quit()
6 break
7
8 크롤링 코드...
9
10 크롤링된 데이터 전처리 코드 ...
답변 1
Airflow는 작업 간에 별도의 프로세스를 사용하므로, 각 작업이 별도의 프로세스로 실행됩니다. 이로 인해 문제가 발생할 수 있습니다. driver.quit()은 Chrome 브라우저를 종료하는 메서드입니다. 하지만 Airflow는 작업이 별도의 프로세스에서 실행되므로, driver.quit()을 호출하더라도 작업이 계속해서 실행되는 것으로 보입니다. 이 문제를 해결하기 위해서는 다음과 같은 방법을 시도해 볼 수 있습니다: 1. 작업이 끝난 후에 직접 프로세스를 종료하는 방식으로 변경합니다. 작업이 완료되면 driver.quit()을 호출한 후 sys.exit()를 사용하여 프로세스를 종료합니다. 이렇게 하면 작업이 정상적으로 종료되고 프로세스도 종료됩니다. 2. Airflow에서 제공하는 Selenium 컨테이너를 사용하여 작업을 실행합니다. Airflow는 컨테이너를 사용하여 작업을 실행하므로, 컨테이너 자체가 종료되면 자원이 해제됩니다. 이 방법을 사용하면 별도의 종료 처리를 걱정할 필요가 없습니다. 위의 두 가지 방법 중 하나를 선택하여 작업을 수정해보시기 바랍니다.
1import sys
2from selenium import webdriver
3
4def task():
5 driver = webdriver.Chrome()
6 while True:
7 if 마지막 페이지라면:
8 driver.quit()
9 break
10
11 크롤링 코드...
12
13 크롤링된 데이터 전처리 코드 ...
14
15 sys.exit() # 프로세스 종료
16
17task()
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!