【发布时间】:2021-03-26 20:40:52
【问题描述】:
我对 python 比较陌生,所以无法弄清楚为什么我一直挂在启动线程上。下面我正在尝试启动线程,但它挂在ticker=threading.Thread 上。该代码正在使用历史数据模拟交易网络套接字,我沿着线程路线走,而不是正确设置模拟套接字,因为它足以满足我的目的。
ohlcv_strats = ['stratergy 1', 'stratergy 2']
aggregate_strats = ['stratergy 3', 'startergy 4']
if stratergy in ohlcv_strats:
q = queue.Queue()
socket = MockSocket(setup, q)
ticker = threading.Thread(target=socket.ohlcv_ticker(), args=(setup, q), daemon=True)
ticker.start()
# ticker result
ohlcv_ticker = q.get()
elif stratergy in aggregate_strats:
print('start aggregate ticker')
据我所知,它似乎是在我的主线程中启动该函数,所以我被困在 for 循环中并且在调试时无法跨步。
这是我要运行的函数的类
class MockSocket:
def __init__(self, setup, q):
self.symbol = setup['symbol']
self.df_ohlcv = setup['df_ohlcv']
self.df_tick = setup['df_tick']
self.q = q
def ohlcv_ticker(self):
# placeholder dict
ticker_dict = {'e': '24hrTicker',
'E': 1615246586071,
's': 'ETHBTC',
'p': '0.00133400',
'P': '3.958',
'w': '0.03415149',
'x': '0.03370200',
'c': '0.03503400',
'Q': '0.35100000',
'b': '0.03503100',
'B': '0.20900000',
'a': '0.03503200',
'A': '44.84800000',
'o': '0.03370000',
'h': '0.03511000',
'l': '0.03352900',
'v': '384222.79900000',
'q': '13121.78030909',
'O': 1615160185712,
'C': 1615246585712,
'F': 239943553,
'L': 240321960,
'n': 378408
}
start_time = self.df_ohlcv['time'].iloc[0]
tf = (self.df_ohlcv['time'] - self.df_ohlcv['time'].shift(1)).dt.total_seconds().bfill().astype(int).iloc[0]
r_start = self.df_ohlcv[self.df_ohlcv['time'] == start_time].index.tolist()[0]
# for loop over df for ticker
for i in range(r_start, len(self.df_ohlcv), 1):
if i > r_start:
r_start = r_start + 1
else:
pass
o, h, l, c, v = self.df_ohlcv['open'].loc[r_start], self.df_ohlcv['high'].loc[r_start], self.df_ohlcv['low'].loc[r_start], self.df_ohlcv['close'].loc[r_start], self.df_ohlcv['volume'].loc[r_start]
o, h, l, c, v = '{:.8f}'.format(o), '{:.8f}'.format(h), '{:.8f}'.format(l), '{:.8f}'.format(c), '{:.8f}'.format(v)
e = (pd.to_datetime(self.df_ohlcv['time'].loc[r_start]) - pd.Timestamp("1970-01-01")) // pd.Timedelta('1ms')
ticker_dict.update({'o' : o, 'h' : h, 'l' : l, 'c' : c, 'v' : v, 's' : self.symbol.upper(), 'E' : e})
time.sleep(tf)
self.q.put(ticker_dict)
我还可以通过其他方式来整理它!这是我的第一个 python 项目。
谢谢!
【问题讨论】:
标签: python multithreading function class python-multithreading