这是因为 Mac 不支持 os.kill()
命令,Airflow 在调用 PythonOperator 时会尝试使用这个命令,导致错误。解决方法是使用 subprocess.Popen()
命令来运行 Python 代码,同时可以设置一个超时时间来避免进程卡死。
下面是一个使用 subprocess.Popen()
命令的 PythonOperator 示例:
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
import subprocess
def my_func():
subprocess.Popen(['python', '/path/to/my_script.py'], stdout=subprocess.PIPE).communicate()
with DAG('my_dag', start_date=datetime(2022, 1, 1), schedule_interval=timedelta(hours=1)) as dag:
task = PythonOperator(task_id='my_task', python_callable=my_func, dag=dag)
在这个示例中,PythonOperator 调用名为 my_func()
的 Python 函数,该函数使用 subprocess.Popen()
命令来运行 /path/to/my_script.py
脚本。如果脚本运行超过一定时间,则 subprocess
会自动关闭该进程。
上一篇:AirflowPythonOperator任务无论发生什么都不会失败
下一篇:AirflowPythonVirtualenvOperatorModuleNotFoundError:Nomodulenamed'dags'