更新:增加mongo独立接口,更新FAQ
This commit is contained in:
parent
2b0ff99560
commit
b6924e7fdc
61
Q_n_A.md
61
Q_n_A.md
@ -123,6 +123,7 @@
|
||||
|
||||
#5、碰到的问题:version `GLIBCXX_3.4.21' not found
|
||||
conda install libgcc
|
||||
若出现更高版本需求,参见第10点
|
||||
|
||||
#6、碰到的问题:在3.5 env下安装RqPlus时,报错:talib/common.c:242:28: fatal error: ta-lib/ta_defs.h: No such file or directory
|
||||
locate ta_defs.h
|
||||
@ -148,3 +149,63 @@ pip install autobahn
|
||||
pip install twisted
|
||||
若出现找不到rc.exe, 请先使用vs x86&x64界面,激活py35后,再运行
|
||||
pip install pyOpenSSL
|
||||
|
||||
# 10、升级gcc
|
||||
使用奇正MOM的CTP API时,提示`GLIBCXX_3.4.22' not found,当前centos最高版本是 3.4.21,通过yum不能升级,需要手工下载升级。
|
||||
|
||||
wget http://ftp.de.debian.org/debian/pool/main/g/gcc-9/libstdc++6_9.2.1-8_amd64.deb
|
||||
解压
|
||||
|
||||
ar -x libstdc++6_9.2.1-8_amd64.deb
|
||||
(就是 ar 命令,不是tar)
|
||||
tar -xvf data.tar.xz
|
||||
|
||||
安装
|
||||
|
||||
删除: rm /usr/lib64/libstdc++.so.6
|
||||
拷贝: cp usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28 /usr/lib64/
|
||||
连接: ln /usr/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6
|
||||
结果
|
||||
|
||||
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
|
||||
|
||||
GLIBCXX_3.4
|
||||
GLIBCXX_3.4.1
|
||||
GLIBCXX_3.4.2
|
||||
GLIBCXX_3.4.3
|
||||
GLIBCXX_3.4.4
|
||||
GLIBCXX_3.4.5
|
||||
GLIBCXX_3.4.6
|
||||
GLIBCXX_3.4.7
|
||||
GLIBCXX_3.4.8
|
||||
GLIBCXX_3.4.9
|
||||
GLIBCXX_3.4.10
|
||||
GLIBCXX_3.4.11
|
||||
GLIBCXX_3.4.12
|
||||
GLIBCXX_3.4.13
|
||||
GLIBCXX_3.4.14
|
||||
GLIBCXX_3.4.15
|
||||
GLIBCXX_3.4.16
|
||||
GLIBCXX_3.4.17
|
||||
GLIBCXX_3.4.18
|
||||
GLIBCXX_3.4.19
|
||||
GLIBCXX_3.4.20
|
||||
GLIBCXX_3.4.21
|
||||
GLIBCXX_3.4.22
|
||||
GLIBCXX_3.4.23
|
||||
GLIBCXX_3.4.24
|
||||
GLIBCXX_3.4.25
|
||||
GLIBCXX_DEBUG_MESSAGE_LENGTH
|
||||
|
||||
# 11、升级glibc
|
||||
使用奇正MOM的CTP API时,提示`GLIBC_2.18' not found,当前centos最高版本是 3.4.21,通过yum不能升级,需要手工下载升级。
|
||||
|
||||
root 用户登录
|
||||
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
|
||||
tar –zxvf glibc-2.18.tar.gz
|
||||
cd glibc-2.18
|
||||
mkdir build
|
||||
cd build
|
||||
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
|
||||
make –j4
|
||||
make install
|
||||
|
0
vnpy/data/mongo/__init__.py
Normal file
0
vnpy/data/mongo/__init__.py
Normal file
270
vnpy/data/mongo/mongo_data.py
Normal file
270
vnpy/data/mongo/mongo_data.py
Normal file
@ -0,0 +1,270 @@
|
||||
# encoding: UTF-8
|
||||
|
||||
# Mongodb 数据服务
|
||||
|
||||
|
||||
import sys,os,traceback
|
||||
|
||||
from datetime import datetime,timedelta
|
||||
from pymongo import MongoClient, ASCENDING
|
||||
from pymongo.errors import ConnectionFailure,AutoReconnect
|
||||
from time import sleep
|
||||
|
||||
from vnpy.trader.vtFunction import loadMongoSetting
|
||||
from vnpy.trader.setup_logger import setup_logger
|
||||
|
||||
class MongoData(object):
|
||||
dbClient = None
|
||||
db_has_connected = False
|
||||
|
||||
def __init__(self):
|
||||
self.dbConnect()
|
||||
|
||||
def dbConnect(self, force=False):
|
||||
if (self.dbClient is None or self.db_has_connected == False) or force:
|
||||
host, port, logging = loadMongoSetting()
|
||||
print('connecting to Mongo:{}:{}'.format(host, port))
|
||||
try:
|
||||
# 设置MongoDB操作的超时时间为0.5秒
|
||||
self.dbClient = MongoClient(host, port, connectTimeoutMS=500)
|
||||
# 调用server_info查询服务器状态,防止服务器异常并未连接成功
|
||||
self.dbClient.server_info()
|
||||
|
||||
self.db_has_connected = True
|
||||
print('mongo db connected')
|
||||
|
||||
except Exception as ex:
|
||||
self.dbClient = None
|
||||
self.db_has_connected = False
|
||||
self.writeError(u'connect to mongo {}:{} exception:{}'.format(host,port,str(ex)))
|
||||
|
||||
def writeLog(self,content):
|
||||
print(content)
|
||||
|
||||
def writeError(self,content):
|
||||
print(content,file=sys.stderr)
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
def dbInsert(self, dbName, collectionName, d):
|
||||
"""向MongoDB中插入数据,d是具体数据"""
|
||||
try:
|
||||
if self.dbClient:
|
||||
db = self.dbClient[dbName]
|
||||
collection = db[collectionName]
|
||||
collection.insert_one(d)
|
||||
else:
|
||||
self.writeError(u'db insert fail')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect(force=True)
|
||||
|
||||
except AutoReconnect as ex:
|
||||
self.writeLog(u'数据库连接断开重连:{}'.format(str(ex)))
|
||||
sleep(1)
|
||||
except ConnectionFailure:
|
||||
self.dbClient = None
|
||||
self.writeError(u'数据库连接断开')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect(force=True)
|
||||
except Exception as ex:
|
||||
self.writeError(u'dbInsert exception:{}'.format(str(ex)))
|
||||
|
||||
def dbInsertMany(self,dbName, collectionName, data_list,ordered=True):
|
||||
"""
|
||||
向MongoDB中插入数据,data_list是具体数据 列表
|
||||
:param dbName:
|
||||
:param collectionName:
|
||||
:param data_list:
|
||||
:param ordered: 是否忽略insert error
|
||||
:return:
|
||||
"""
|
||||
if not isinstance(data_list, list):
|
||||
self.writeError('data_list should be a list')
|
||||
return
|
||||
try:
|
||||
if self.dbClient:
|
||||
db = self.dbClient[dbName]
|
||||
collection = db[collectionName]
|
||||
collection.insert_many(data_list, ordered = ordered)
|
||||
else:
|
||||
self.writeError('db insert many fail')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect(force=True)
|
||||
|
||||
except AutoReconnect as ex:
|
||||
self.writeError(u'数据库连接断开重连:{}'.format(str(ex)))
|
||||
sleep(1)
|
||||
except ConnectionFailure:
|
||||
self.dbClient = None
|
||||
self.writeError(u'数据库连接断开')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect(force=True)
|
||||
except Exception as ex:
|
||||
self.writeError(u'dbInsertMany exception:{}'.format(str(ex)))
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
def dbQueryOne(self, dbName, collectionName, flt):
|
||||
"""从MongoDB中读取数据,d是查询要求,返回的是一个结果"""
|
||||
try:
|
||||
if self.dbClient:
|
||||
db = self.dbClient[dbName]
|
||||
collection = db[collectionName]
|
||||
|
||||
return collection.find_one(flt)
|
||||
|
||||
else:
|
||||
self.writeLog('db query fail')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect()
|
||||
|
||||
except AutoReconnect as ex:
|
||||
self.writeError(u'数据库连接断开重连:{}'.format(str(ex)))
|
||||
sleep(1)
|
||||
except ConnectionFailure:
|
||||
self.dbClient = None
|
||||
self.writeError(u'数据库连接断开')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect()
|
||||
except Exception as ex:
|
||||
self.writeError(u'dbQuery exception:{}'.format(str(ex)))
|
||||
|
||||
return None
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
def dbQuery(self, dbName, collectionName, d, sortKey='', sortDirection=ASCENDING):
|
||||
"""从MongoDB中读取数据,d是查询要求,返回的是数据库查询的指针"""
|
||||
try:
|
||||
if self.dbClient:
|
||||
db = self.dbClient[dbName]
|
||||
collection = db[collectionName]
|
||||
|
||||
if sortKey:
|
||||
cursor = collection.find(d).sort(sortKey, sortDirection) # 对查询出来的数据进行排序
|
||||
else:
|
||||
cursor = collection.find(d)
|
||||
|
||||
if cursor:
|
||||
return list(cursor)
|
||||
else:
|
||||
return []
|
||||
else:
|
||||
self.writeLog('db query fail')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect()
|
||||
|
||||
except AutoReconnect as ex:
|
||||
self.writeError(u'数据库连接断开重连:{}'.format(str(ex)))
|
||||
sleep(1)
|
||||
except ConnectionFailure:
|
||||
self.dbClient = None
|
||||
self.writeError(u'数据库连接断开')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect()
|
||||
except Exception as ex:
|
||||
self.writeError(u'dbQuery exception:{}'.format(str(ex)))
|
||||
|
||||
return []
|
||||
|
||||
def dbQueryBySort(self, dbName, collectionName, d, sortName, sortType, limitNum=0):
|
||||
"""从MongoDB中读取数据,d是查询要求,sortName是排序的字段,sortType是排序类型
|
||||
返回的是数据库查询的指针"""
|
||||
try:
|
||||
if self.dbClient:
|
||||
db = self.dbClient[dbName]
|
||||
collection = db[collectionName]
|
||||
if limitNum > 0:
|
||||
cursor = collection.find(d).sort(sortName, sortType).limit(limitNum)
|
||||
else:
|
||||
cursor = collection.find(d).sort(sortName, sortType)
|
||||
if cursor:
|
||||
return list(cursor)
|
||||
else:
|
||||
return []
|
||||
else:
|
||||
self.writeLog('db query fail')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect()
|
||||
|
||||
except AutoReconnect as ex:
|
||||
self.writeError(u'数据库连接断开重连:{}'.format(str(ex)))
|
||||
sleep(1)
|
||||
except ConnectionFailure:
|
||||
self.dbClient = None
|
||||
self.writeError(u'数据库连接断开')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect()
|
||||
except Exception as ex:
|
||||
self.writeError(u'dbQueryBySort exception:{}'.format(str(ex)))
|
||||
|
||||
return []
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
def dbUpdate(self, dbName, collectionName, d, flt, upsert=False,replace=True):
|
||||
"""向MongoDB中更新数据,d是具体数据,flt是过滤条件,upsert代表若无是否要插入"""
|
||||
try:
|
||||
if self.dbClient:
|
||||
db = self.dbClient[dbName]
|
||||
collection = db[collectionName]
|
||||
if replace:
|
||||
rtn =collection.replace_one(flt, d, upsert)
|
||||
else:
|
||||
rtn = collection.update_one(flt, {'$set':d}, upsert)
|
||||
|
||||
return rtn
|
||||
|
||||
else:
|
||||
self.writeLog('db update fail')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect()
|
||||
|
||||
except AutoReconnect as ex:
|
||||
self.writeError(u'数据库连接断开重连:{}'.format(str(ex)))
|
||||
sleep(1)
|
||||
except ConnectionFailure:
|
||||
self.dbClient = None
|
||||
self.writeError(u'数据库连接断开')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect()
|
||||
except Exception as ex:
|
||||
self.writeError(u'dbUpdate exception:{}'.format(str(ex)))
|
||||
|
||||
return None
|
||||
|
||||
def dbDelete(self,dbName, collectionName, flt):
|
||||
"""
|
||||
向mongodb中,删除数据,flt是过滤条件
|
||||
:param dbName:
|
||||
:param collectionName:
|
||||
:param flt:
|
||||
:return:
|
||||
"""
|
||||
try:
|
||||
if self.dbClient:
|
||||
db = self.dbClient[dbName]
|
||||
collection = db[collectionName]
|
||||
collection.delete_many(flt)
|
||||
else:
|
||||
self.writeLog('db delete fail')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect()
|
||||
except ConnectionFailure:
|
||||
self.dbClient = None
|
||||
self.writeError(u'数据库连接断开')
|
||||
if self.db_has_connected:
|
||||
self.writeLog(u'重新尝试连接数据库')
|
||||
self.dbConnect()
|
||||
except Exception as ex:
|
||||
self.writeError(u'dbDelete exception:{}'.format(str(ex)))
|
Loading…
Reference in New Issue
Block a user