Процесс синхронизации Heroku не сохраняет данные в файл CSV

#python #heroku #clock

#python #heroku #часы

Вопрос:

Я использую Heroku для создания веб-страницы, которая ежедневно удаляет некоторый контент с других страниц и впоследствии показывает это на странице. Проблема, с которой я столкнулся, заключается в том, что при запуске ежедневного Clock.py файла выполняется процесс очистки, но новый файл CSV вообще не сохраняется. Как вы думаете, в чем причина этого?

Чтобы предоставить некоторую дополнительную информацию, функция scraper открывает веб-страницу, удаляет некоторый контент и возвращает фрейм данных pandas. Чего я сейчас хочу добиться, так это сохранить этот фрейм данных в папке data/ с именем df_result2.csv . Короткое замечание: процесс очистки работает отлично, поскольку я мог печатать фрейм данных на консоль после каждого запуска. Единственная проблема связана с сохранением этого файла. У вас есть какие-либо предложения, что мне следует изменить?

 #clock.py
from apscheduler.schedulers.blocking import BlockingScheduler
import datetime
import pandas as pd

from components import scraper

sched = BlockingScheduler()

#Example for a job
@sched.scheduled_job('interval', minutes=3)
def timed_job():
    print('This job is run every 3 minutes.')
    result = scraper()
    pd.DataFrame.to_csv(result, "data/df_result2.csv")
    print(result)
  

Комментарии:

1. Я думаю, что вы ищете result.to_csv («data / df_result2.csv»), поскольку pd.DataFrame.to_csv — это экземпляр, а не статический метод класса pd.DataFrame, насколько я знаю. Какую ошибку вы видите?

2. @DavidWaterworth Спасибо за ваш ответ. Интересно, что сообщения об ошибке вообще нет. Причина может быть в этой условной файловой системе, как объяснил Крис. Следовательно, файл может быть недоступен для других динамических процессоров

Ответ №1:

Непосредственная проблема, вероятно, заключается в том, что data/ каталог не существует.

Но большая проблема заключается в том, что файловая система Heroku эфемерна. Любые изменения, которые вы вносите в него, будут потеряны при каждом перезапуске вашего dyno. Это происходит часто и непредсказуемо (по крайней мере, один раз в день).

Поскольку вы генерируете свои данные каждые три минуты, риск несколько ограничен, но определенно могут быть случаи, когда этот файл может не существовать, когда он вам нужен.

Вместо хранения ваших данных в файловой системе я настоятельно рекомендую вам использовать надлежащее хранилище данных. PostgreSQL отлично работает с Heroku. Если вы действительно хотите использовать файл, рассмотрите возможность сохранения его в стороннем сервисе, таком как Amazon S3.