python中threading开启关闭线程操作
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)

在python中启动和关闭线程: 首先导入threading import threading 然后定义一个方法 def serial_read(): … … 然后定义线程,target指向要执行的方法 myThread = threading.Thread(target=serial_read) 启动它 myThread.start() 二、停止线程 不多说了直接上代码 import inspect import ctypes def _async_raise(tid, exctype): """raises the exception, performs cleanu 在Python编程语言中,线程是并发执行任务的基本单元,特别是在需要执行多个并行任务时。`threading`模块提供了创建和管理线程的功能。本文将深入探讨如何在Python中开启和关闭线程,以及如何控制线程的内部状态。 **开启线程** 要开启一个新的线程,首先需要导入`threading`模块。接着,定义一个函数,这个函数将在新线程中执行。例如: ```python import threading def serial_read(): # 在这里写入需要在新线程中执行的代码 pass ``` 创建线程对象时,需要提供一个目标函数,即`target`参数,指向要执行的函数。例如: ```python myThread = threading.Thread(target=serial_read) ``` 使用`start()`方法启动线程: ```python myThread.start() ``` **关闭线程** 在Python的`threading`模块中,线程一旦开始执行,通常无法直接停止。这是因为Python的线程模型不支持安全地中断正在执行的线程。但可以采用一些间接方法,比如设置一个全局标志,让线程在检查到这个标志时主动结束。 以下是一个示例,展示了如何使用`inspect`和`ctypes`库来强制停止线程: ```python import inspect import ctypes def _async_raise(tid, exctype): tid = ctypes.c_long(tid) if not inspect.isclass(exctype): exctype = type(exctype) res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype)) if res == 0: raise ValueError("invalid thread id") elif res != 1: # 如果返回值大于1,可能存在问题,再次调用该函数恢复 ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None) raise SystemError("PyThreadState_SetAsyncExc failed") def stop_thread(thread): _async_raise(thread.ident, SystemExit) # 使用stop_thread(myThread)来尝试停止线程 ``` 然而,这种方法并不推荐,因为可能会导致资源泄露和未处理的异常。更安全的做法是使用一个标志来指示线程何时应该停止。 **控制线程的内部状态** 为了更好地控制线程,我们可以创建一个自定义的线程类,包含一个标志来指示线程是否应继续运行。以下是一个简单的例子: ```python import threading import time class可控线程(threading.Thread): def __init__(self): super().__init__() self.stop_flag = False self.internal_value = 0 def run(self): while not self.stop_flag: # 在这里执行线程的任务 time.sleep(2) def stop(self): self.stop_flag = True def set_internal_value(self, value): self.internal_value = value def get_internal_value(self): return self.internal_value if __name__ == "__main__": testThread =可控线程() testThread.setDaemon(True) # 设置为守护线程,主程序结束时自动关闭 testThread.start() print(testThread.get_internal_value()) time.sleep(2) # 主程序休眠 testThread.stop() # 停止线程 time.sleep(2) # 确保线程有机会停止 print(testThread.is_alive()) # 检查线程是否还在运行 ``` 在这个例子中,我们创建了一个名为`可控线程`的类,它继承自`threading.Thread`。线程有一个`stop_flag`属性来控制是否继续执行,还有`set_internal_value`和`get_internal_value`方法用于外部访问和修改线程内部的状态。 请注意,虽然上述方法可以实现线程的停止,但线程可能不会立即停止,因为它可能正在执行某个阻塞操作(如I/O)。因此,最佳实践是在线程的`run`方法中定期检查停止标志,以便在适当的时候优雅地结束线程。



























- 2301_798691092025-01-25感谢大佬分享的资源,对我启发很大,给了我新的灵感。

- 粉丝: 11
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源


