Anonymous
Как запустить асинхронную функцию в Airflow?
Сообщение
Anonymous » 05 янв 2026, 20:59
Я пишу задачу воздушного потока для чтения большого CSV-файла и сохранения его в базе данных PostgreSQL.
Я нашел этот пакет asyncpg, который имеет функцию копирования, которая работает намного быстрее, чем любые другие пакеты. Однако он асинхронный, и я не знаю, как включить его в Airflow.
Вот пример кода:
Код: Выделить всё
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
from pandas import DataFrame
import asyncpg
async def to_sql(dataframe, table_name, schema_name='public', timeout=None, truncate=False):
connection = await asyncpg.connect(user='postgres', host='host.docker.internal', database='quantaxis', password='123456')
result = await connection.copy_records_to_table(
table_name,
records=dataframe.values.tolist(),
columns=shared_columns,
schema_name=schema_name,
timeout=timeout)
await connection.close()
return result
default_args = {
'owner': 'Airflow',
'depends_on_past': False,
'start_date': datetime(2020, 1, 1),
'retries': 1,
'retry_delay': timedelta(minutes=1),
}
dag = DAG('pythonexp2123', default_args=default_args, schedule_interval=timedelta(days=1))
async def save_file_to_database(ds):
df = pd.read_csv("data{0}.csv".format(ds))
r = await to_sql(df, 'test')
return r
t1 = PythonOperator(
task_id='pushing_task',
provide_context=True,
python_callable=save_file_to_database,
dag=dag
)
t1
Когда я запускаю его, он возвращает ошибку:
Как мне изменить функцию, чтобы этот Dag работал? Я все еще хочу использовать пакет asyncpg из-за его скорости.
Подробнее здесь:
https://stackoverflow.com/questions/602 ... in-airflow
1767635992
Anonymous
Я пишу задачу воздушного потока для чтения большого CSV-файла и сохранения его в базе данных PostgreSQL. Я нашел этот пакет asyncpg, который имеет функцию копирования, которая работает намного быстрее, чем любые другие пакеты. Однако он асинхронный, и я не знаю, как включить его в Airflow. Вот пример кода: [code]from airflow import DAG from airflow.operators.python_operator import PythonOperator from datetime import datetime, timedelta from pandas import DataFrame import asyncpg async def to_sql(dataframe, table_name, schema_name='public', timeout=None, truncate=False): connection = await asyncpg.connect(user='postgres', host='host.docker.internal', database='quantaxis', password='123456') result = await connection.copy_records_to_table( table_name, records=dataframe.values.tolist(), columns=shared_columns, schema_name=schema_name, timeout=timeout) await connection.close() return result default_args = { 'owner': 'Airflow', 'depends_on_past': False, 'start_date': datetime(2020, 1, 1), 'retries': 1, 'retry_delay': timedelta(minutes=1), } dag = DAG('pythonexp2123', default_args=default_args, schedule_interval=timedelta(days=1)) async def save_file_to_database(ds): df = pd.read_csv("data{0}.csv".format(ds)) r = await to_sql(df, 'test') return r t1 = PythonOperator( task_id='pushing_task', provide_context=True, python_callable=save_file_to_database, dag=dag ) t1 [/code] Когда я запускаю его, он возвращает ошибку: [code]Can't Pickle Object [/code] Как мне изменить функцию, чтобы этот Dag работал? Я все еще хочу использовать пакет asyncpg из-за его скорости. Подробнее здесь: [url]https://stackoverflow.com/questions/60266843/how-to-run-async-function-in-airflow[/url]