Python函数没有';在线程上调用时,不能开始执行

Python函数没有';在线程上调用时,不能开始执行,python,python-3.x,multithreading,Python,Python 3.x,Multithreading,我正在制作一个简单的Python函数,其中有一个函数运行在主线程上,名为Updater,它现在只打印一些东西,但它将执行其他任务,它由schedule调用,还有另一个我想并行运行的函数,因此我使用线程 以下是我的尝试: import websocket, json, time, schedule, logging, cfscrape, threading, requests def Run(): def process_message(ws,msg): print(ms

我正在制作一个简单的Python函数,其中有一个函数运行在主线程上,名为
Updater
,它现在只打印一些东西,但它将执行其他任务,它由
schedule
调用,还有另一个我想并行运行的函数,因此我使用线程

以下是我的尝试:

import websocket, json, time, schedule, logging, cfscrape, threading, requests

def Run():
    def process_message(ws,msg):
        print(msg)

    def Connect():
        websocket.enableTrace(False)
        ws = websocket.WebSocketApp("wss://stream.binance.com/stream?streams=btcusdt@depth", on_message = process_message)
        ws.run_forever()

def Updater():
    print('Updating..')

threading.Thread(target=Run).start()
schedule.every(1).seconds.do(Updater)

while True:
    schedule.run_pending()
    time.sleep(1)
我试图做的是让这个脚本使用线程并行执行websocket连接和调度函数。我的代码的问题是
Run
没有开始。只有
更新程序
将开始执行


有人能帮我吗?我是不是用错了线程?提前感谢。

可能是由于缓冲,它实际运行但不打印,请尝试执行以下操作:

print(msg, flush=True)

此外,您从不调用connect函数。使用运行中缩进在其声明下调用它可能是因为它实际运行但由于缓冲而不打印,请尝试执行以下操作:

print(msg, flush=True)

此外,您从不调用connect函数。使用运行中缩进在其声明下调用它

您正在将
Run()
函数设置为线程的目标。但是,当您运行函数时,它所做的只是定义函数
process\u message
Connect
,既不调用也不返回它们。所以实际上你的线程在你开始后就结束了,什么都不做,这就是为什么它不会打印任何东西

要让它有所作为,最简单的方法是:

导入websocket、json、时间、计划、日志、CFScrap、线程、请求
def Run():
def过程_消息(ws、msg):
打印(msg)
def Connect():
websocket.enableTrace(错误)
ws=websocket.WebSocketApp(“wss://stream.binance.com/stream?streams=btcusdt@深度”,在消息上=处理消息)
ws.run_forever()
#无需调用进程\消息,因为它将由
#由Connect创建的WebSocketApp
Connect()#实际调用Connect函数,以便在线程中使用它
def更新程序():
打印('更新..')
threading.Thread(target=Run).start()
schedule.every(1).seconds.do(更新程序)
尽管如此:
schedule.run_pending()
时间。睡眠(1)

我还建议不要使用大写字母作为第一个字符命名函数,因为按照惯例()这应该为类保留。

您正在将
Run()
函数设置为线程的目标。但是,当您运行函数时,它所做的只是定义函数
process\u message
Connect
,既不调用也不返回它们。所以实际上你的线程在你开始后就结束了,什么都不做,这就是为什么它不会打印任何东西

要让它有所作为,最简单的方法是:

导入websocket、json、时间、计划、日志、CFScrap、线程、请求
def Run():
def过程_消息(ws、msg):
打印(msg)
def Connect():
websocket.enableTrace(错误)
ws=websocket.WebSocketApp(“wss://stream.binance.com/stream?streams=btcusdt@深度”,在消息上=处理消息)
ws.run_forever()
#无需调用进程\消息,因为它将由
#由Connect创建的WebSocketApp
Connect()#实际调用Connect函数,以便在线程中使用它
def更新程序():
打印('更新..')
threading.Thread(target=Run).start()
schedule.every(1).seconds.do(更新程序)
尽管如此:
schedule.run_pending()
时间。睡眠(1)

我还建议不要使用大写字母作为第一个字符命名函数,因为按照惯例()这应该是为类保留的。

是的,我认为问题在于我没有在这里调用Connect函数。我试图通过打印process_消息上发生的事情来调试它,但什么都没有appears@JayK23是的,给这两个函数都添加一个调用,或者直接用runYes编写两个内部函数的代码,我想问题是我没有在这里调用Connect函数。我试图通过打印process_消息上发生的事情来调试它,但什么都没有appears@JayK23是的,给这两个函数都添加一个调用,或者直接在run中编写两个内部函数的代码