2014-02-08 3 views
2

Это вопрос о том, как я могу найти точку отказа в сложном процессе. (Если вы можете выяснить, что на самом деле происходит не так ... ничего себе.)Как выяснить, почему мои потоковые данные останавливаются?

Я использую QuickFix с Python 2.7 для подключения к фьючерсным рынкам, и я использую pandas для работы с данными и поместить его в dataframes т.д. процесс выполняется следующим образом:

  1. Подключитесь к адаптеру TT FIX, который обеспечивает обменный доступ.

  2. Отправить MarketDataIncrementalRefreshRequest, что приводит к потоковой передаче данных (каждый раз, когда делается торговля, это сообщается). В результате время между входящими сообщениями во время периодов занятости может составлять порядка 10 миллисекунд.

  3. Каждое сообщение анализируется, преобразуется в фреймворк данных 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.

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

Что может быть проблемой здесь? Как мне понять, что происходит не так?

+2

Прямо сейчас, когда он останавливается, вы ничего не видите, потому что исключения подавляются. Чтобы помочь вам на вашем пути, я бы посоветовал не иметь исключения, за исключением всяких проблем, включая системные ошибки. И затем сообщать об исключениях через stdout или logging. Для обоих исключений попробуйте изменить их на 'except Exception as err:' и на следующей строке 'print (str (err))'. – CasualDemon

+0

Спасибо @CasualDemon, я попробую это, как только рынок откроется в воскресенье вечером. – Wapiti

+2

Кроме того, вы можете использовать модуль 'traceback' для печати трассировки. 'traceback.print_exc()' будет печатать трассировку для текущего исключения. – cpburnz

ответ

2

Фигурный я позволил бы кто-нибудь, кто сталкивался с этим вопросом, как я знаю, разобрались:

Печать ошибки, как это предлагается по комментариям выше на самом деле не поможет решить эту проблему. Данные будут по-прежнему останавливаться без ошибок печати. Причина заключалась в том, что иногда QuickFix загружается автономно, по какой-то причине, и будет автоматически входить в систему. Очевидно, это то, с чем приходится сталкиваться приложениям FIX.

Что происходит: потому что я начал загрузку данных вручную, каждый раз, когда я загружался в автономном режиме, данные были остановлены. Поэтому, поместив запрос данных в функцию OnLogon QuickFix, я смог автоматически выполнять запросы на загрузку всякий раз, когда программа вошла в систему.

Это решило мою проблему. Благодаря CasualDemon и cpburnz.

Смежные вопросы