Multithreading Python27能制作没有线程的计时器吗?计时器?
所以,基本上我想做一个计时器,但我不想用Multithreading Python27能制作没有线程的计时器吗?计时器?,multithreading,python-2.7,websocket,Multithreading,Python 2.7,Websocket,所以,基本上我想做一个计时器,但我不想用thread.timer 效率 Python自己生成线程,效率不高,最好不要使用它。 我搜索与此相关的文章。并检查了使用线程的速度是否较慢。 e、 g)将单个进程划分为N个,并使其工作为线程,速度较慢 然而,我需要使用线程 class Works(object): def __init__(self): self.symbol_dict = config.ws_api.get("ASSET_ABBR_LIST") self.dict
thread.timer
效率
- Python自己生成线程,效率不高,最好不要使用它。 我搜索与此相关的文章。并检查了使用线程的速度是否较慢。 e、 g)将单个进程划分为N个,并使其工作为线程,速度较慢
class Works(object):
def __init__(self):
self.symbol_dict = config.ws_api.get("ASSET_ABBR_LIST")
self.dict = {}
self.ohlcv1m = []
def on_open(self, ws):
ws.send(json.dumps(config.ws_api.get("SUBSCRIPTION_DICT")))
每次我从web套接字服务器获取消息时,我都将其存储在self.dict中
def on_message(self,ws,message):
message = json.loads(message)
if len(message) > 2 :
ticker = message[2]
pair = self.symbol_dict[(ticker[0])]
baseVolume = ticker[5]
timestmap = time.time()
try:
type(self.dict[pair])
except KeyError as e:
self.dict[pair] = []
self.dict[pair].append({
'pair':pair,
'baseVolume' : baseVolume,
})
def run(self):
websocket.enableTrace(True)
ws = websocket.WebSocketApp(
url = config.ws_api.get("WEBSOCK_HOST"),
on_message = self.on_message,
on_open = self.on_open
)
ws.run_forever(sslopt = {"cert_reqs":ssl.CERT_NONE})
每60年代就有一次。计算self.dict并保存到self.ohlcv1m
并将其发送给db。最终,self.dict和self.ohlcv1m再次初始化,以存储来自服务器端的1min数据
def every60s(self):
threading.Timer(60, self.every60s).start()
for symbol in self.dict:
tickerLists = self.dict[symbol]
self.ohlcv1m.append({
"V": sum([
float(ticker['baseVolume']) for ticker in tickerLists]
})
#self.ohlcv1m will go to database every 1m
self.ohlcv1 = [] #init again
self.dict = {} #init again
if __name__ == "__main__":
work=Works()
t1 = threading.Thread(target=work.run)
t1.daemon = True
t1.start()
work.every60s()
(对不起,这是个缩进)
谢谢答案归结为您是否需要代码每60秒运行一次,或者您是否可以在两次运行之间等待60秒(即,如果逻辑需要5秒,它将每65秒运行一次) 如果你对两次跑步之间只有60秒的间隔感到满意,你可以这样做
import time
while True:
every60s()
time.sleep(60)
如果您真的决定不使用线程,而是让它每60秒启动一次,而不考虑最后一次轮询时间,那么您可以计算最后一次执行的时间,并从60秒中减去该时间以获得睡眠时间
然而,实际上,使用您已经获得的代码,您不会遇到您可能已经阅读过的Python线程的任何问题。当您有多个线程同时运行且所有CPU受限时,就会出现这些问题,这里的情况似乎不是这样,除非有一些非常慢的线程,您提供的代码中没有CPU密集型工作。当工作不受IO限制时,Python中的线程会有一些低效,但对于您在这里得到的代码,您似乎试图过早地优化这一不必要的任务。我刚刚添加了更多的代码。这是我第一次在这里提问,所以请原谅我@格里斯谢谢你的解释!所以实际上我代码中的线程问题并不重要。因为我不使用多线程?