Python中的计划函数未启动

问题描述 投票:0回答:1

我编写了以下脚本,它连接到Websocket并从中接收一些数据。在运行此脚本时,我尝试每2秒运行一个函数。在这种情况下,该函数仅显示一条消息,但是当然是用于调试,它将在将来执行其他任务。

我的问题是Printer()没有开始运行,我看不到每2秒出现一次该消息。我知道问题是Connect()有其自己的线程,因此Printer()Connect()停止工作之前不会被调度。我希望Printer()运行while我正在从websocket接收数据。有什么办法吗?使它异步?使用更多线程?

import websocket, json, time, schedule, logging, cfscrape
from websocket import create_connection

try:
    import thread
except ImportError:
    import _thread as thread


MyList = []
MexCoinsToMonitor = ['XBTUSD']
LastOrder = format(float(time.time()), '.0f')
BU = cfscrape.create_scraper()



def process_message(ws,msg):

    try:
        message = json.loads(msg)
        print(message)


    except Exception as e:
        print(e)

def Printer():
    print('hello')

def on_error(ws, error):
    print('Error')

def on_close(ws):
    Checker()

def on_open(ws):
    def run(*args):
        for value in MexCoinsToMonitor:
            tradeStr=""" {"op": "subscribe", "args": ["orderBookL2_25:%s"]} """%(value)
            ws.send(tradeStr)
            time.sleep(1)
    thread.start_new_thread(run, ())

def Checker():
    global LastOrder
    TimeDiff = float(time.time()) - float(LastOrder)
    print (LastOrder, TimeDiff)
    if TimeDiff > 20:
        ws = websocket.WebSocketApp("wss://www.bitmex.com/realtime", on_message = process_message, on_error = on_error, on_close = on_close)
        ws.on_open = on_open
        ws.run_forever()


def Connect():
    websocket.enableTrace(False)
    ws = websocket.WebSocketApp("wss://www.bitmex.com/realtime", on_message = process_message, on_error = on_error, on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()




Connect()
schedule.every(2).seconds.do(Printer)

while True:
    schedule.run_pending()
    time.sleep(2)

要计划,我正在使用Schedule模块。

python python-3.x
1个回答
1
投票

您确实可以使其不同步。这将在连接工作时运行打印机。您可以为此使用线程模块。

import threading
threading.Thread(target=Printer).start()

那会启动打印机。比您可以连接而不必完成打印机。

如果要继续调用该函数,只需使用while循环。

import threading
import time
while True:
    threading.Thread(target=Printer).start()
    time.sleep(2)
© www.soinside.com 2019 - 2024. All rights reserved.