Это вопрос о том, как я могу найти точку отказа в сложном процессе. (Если вы можете выяснить, что на самом деле происходит не так ... ничего себе.)Как выяснить, почему мои потоковые данные останавливаются?
Я использую QuickFix
с Python 2.7
для подключения к фьючерсным рынкам, и я использую pandas
для работы с данными и поместить его в dataframes т.д. процесс выполняется следующим образом:
Подключитесь к адаптеру TT FIX, который обеспечивает обменный доступ.
Отправить MarketDataIncrementalRefreshRequest, что приводит к потоковой передаче данных (каждый раз, когда делается торговля, это сообщается). В результате время между входящими сообщениями во время периодов занятости может составлять порядка 10 миллисекунд.
Каждое сообщение анализируется, преобразуется в фреймворк данных
pandas
и объединяется с ранее существующим DataFrame для этого рынка. Код для этого:#df is dataframe of trades with 10 columns df.index = pd.to_datetime(df.TIME) #concatenate with prior data #TS_DIC is a dictionary holding trade data for various markets try: df_prev = TS_DIC[market_key] TS_DIC[market_key] = pd.concat([df_prev,df]) except: #in the case this is the first message received: TS_DIC[market_key] = df #now write to disk try: #if file exists just write to_file = open('path/for/data', 'a+') df.to_csv(mode='a+', path_or_buf= to_file, header=False, index=False) to_file.close() except: #create the file with headers and write to_file = open(path+name, 'wb') df.to_csv(path_or_buf= to_file, index=False) to_file.close()
Этот процесс работает отлично, иногда в течение нескольких часов, иногда в течение минут, после чего он перестает работать. Ошибок никогда не бывает, он просто останавливается. Результатом являются данные с пробелами. Я могу снова начать процесс, снова сделав шаг 2.
Я был бы признателен за помощь любого, кто использует данные высокой пропускной способности и, возможно, даже эти пакеты программного обеспечения.
Что может быть проблемой здесь? Как мне понять, что происходит не так?
Прямо сейчас, когда он останавливается, вы ничего не видите, потому что исключения подавляются. Чтобы помочь вам на вашем пути, я бы посоветовал не иметь исключения, за исключением всяких проблем, включая системные ошибки. И затем сообщать об исключениях через stdout или logging. Для обоих исключений попробуйте изменить их на 'except Exception as err:' и на следующей строке 'print (str (err))'. – CasualDemon
Спасибо @CasualDemon, я попробую это, как только рынок откроется в воскресенье вечером. – Wapiti
Кроме того, вы можете использовать модуль 'traceback' для печати трассировки. 'traceback.print_exc()' будет печатать трассировку для текущего исключения. – cpburnz