首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免使用ibapi获取OSError:[Errno9] Bad文件描述符?

如何避免使用ibapi获取OSError:[Errno9] Bad文件描述符?
EN

Stack Overflow用户
提问于 2019-10-30 13:18:12
回答 1查看 1.2K关注 0票数 1

在下面的代码中,我将数据收集到名为ohlcv的pandas数据帧中,并将应用程序抛出到ib服务器:

代码语言:javascript
复制
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
from ibapi.ticktype import TickTypeEnum
from ibapi.common import * #for TickerId type

import pandas as pd
from socket import error as SocketError
import errno

def read_ohlcv(reqId, symbol, sec_type, exch, prim_exch, curr, durationStr, barSizeSetting):

    contract = Contract()
    contract.symbol = symbol
    contract.secType = sec_type
    contract.exchange = exch
    contract.primaryExchange = prim_exch
    contract.currency = curr

    class TestApp(EWrapper, EClient):

        def __init__(self):
            EClient.__init__(self,self)

            self.historicaldata = pd.DataFrame([], columns = ['Open', 'High', 'Low', 'Close', 'Volume'])


        def error(self, reqId:TickerId, errorCode:int, errorString:str):
            if reqId > -1:
                print("Error. Id: " , reqId, " Code: " , errorCode , " Msg: " , errorString)

        def historicalData(self,reqId, bar):

            self.historicaldata.index.name = 'Date'
            self.historicaldata.loc[bar.date] = bar.open, bar.high, bar.low, bar.close, bar.volume 

        def historicalDataEnd(self, reqId: int, start: str, end: str):
            super().historicalDataEnd(reqId, start, end)
            print("HistoricalDataEnd. ReqId:", reqId, "from", start, "to", end)
            self.disconnect()


    app = TestApp()
    app.connect('127.0.0.1', 7497, 0)

    app.reqHistoricalData(reqId = reqId, 
                            contract = contract, 
                            endDateTime = '', 
                            durationStr = durationStr, 
                            barSizeSetting = barSizeSetting, 
                            whatToShow = 'TRADES',
                            useRTH = 1, # =1 for RTH data
                            formatDate = 1,
                            keepUpToDate = False,
                            chartOptions = [])

    ohlcv = app.historicaldata
    app.run()
    sleep(5)

    return ohlcv

当我调用该函数时,代码运行良好,并且我将数据收集为pandas dataframe。然而,我得到了以下错误,我希望了解并找到避免它的方法:

代码语言:javascript
复制
unhandled exception in EReader thread
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/ibapi/reader.py", line 34, in run
    data = self.conn.recvMsg()
  File "/usr/local/lib/python3.6/dist-packages/ibapi/connection.py", line 99, in recvMsg
    buf = self._recvAllMsg()
  File "/usr/local/lib/python3.6/dist-packages/ibapi/connection.py", line 119, in _recvAllMsg
    buf = self.socket.recv(4096)
OSError: [Errno 9] Bad file descriptor
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-04 04:58:55

ibapi包与套接字断开连接,但读取器仍在尝试从套接字读取。源代码已经被修改,只是为了捕获错误,但它还没有发布。你可以按照这里的建议修改你的源代码。https://groups.io/g/twsapi/message/42580

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58619155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档