编辑器里threading.Thread(target=run).start()报错
时间: 2023-08-22 11:08:32 浏览: 103
如果你使用的是 Python 3.x 版本,那么需要将 `threading.Thread(target=run).start()` 修改为 `threading.Thread(target=run, daemon=True).start()`,即添加一个 `daemon=True` 参数。这是因为在 Python 3.x 版本中,主线程结束后,子线程不会自动结束,需要手动将子线程设置为守护线程(daemon thread),使得主线程结束时子线程也随之结束。
如果你使用的是 Python 2.x 版本,可以将 `threading.Thread(target=run).start()` 修改为 `threading.Thread(target=run)`, `thread.setDaemon(True)` 和 `thread.start()` 三行代码来实现将子线程设置为守护线程的功能。
修改后的代码如下所示:
```python
import websocket
import time
import threading
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
def run(*args):
while True:
time.sleep(10)
ws.send("ping")
threading.Thread(target=run, daemon=True).start()
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://echo.websocket.org/",
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.on_open = on_open
ws.run_forever()
```
在这个修改后的代码中,我们将 `threading.Thread(target=run).start()` 修改为 `threading.Thread(target=run, daemon=True).start()`,就可以解决这个报错问题。
阅读全文