您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python的子线程和子进程是如何手动结束的?

51自学网 2021-10-30 22:26:45
  python
这篇教程Python的子线程和子进程是如何手动结束的?写得很实用,希望能帮到您。

如何结束Python的子线程和子进程

结束子线程的方法:

这个是搬运其他大神的代码,鄙人也不知道原理,反正拿来主义,暂时没发现什么缺点,先用着再说。

import inspectimport ctypesimport threadingfrom time import sleep  def serial_read():     while True:         print("春哥纯爷们!")         sleep(1)   def _async_raise(tid, exctype):    """raises the exception, performs cleanup if needed"""    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:        # """if it returns a number greater than one, you're in trouble,        # and you should call it again with exc=NULL to revert the effect"""        ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)        raise SystemError("PyThreadState_SetAsyncExc failed")  def stop_thread(thread):    _async_raise(thread.ident, SystemExit)  def Air():     ords=0     myThread = threading.Thread(target=serial_read)     myThread.start()     while True:          ords+=1         if ords==10:             stop_thread(myThread)            print("停止子线程")            break          sleep(1)  if __name__ == '__main__':     Air()

下面是结束子进程的方法:

import inspectimport ctypesfrom time import sleepfrom multiprocessing import Process  def serial_read():     while True:         print("春哥纯爷们!")         sleep(1)  def Air():     ords=0     myThread = Process(target=serial_read)     myThread.start()     while True:          ords+=1         if ords==10:             myThread.terminate()            print("停止子进程")            break          sleep(1)  if __name__ == '__main__':     Air()

这里说一下如果用类的话要如何写,想结束子进程或者子线程就需要拿到进程对象或者线程对象,但是类中没办法实现创建一个类属性的方式然后用self.×××的方式来在其他类方法中调用,这时候就创建一个类属性list,然后创建好子进程或者子线程后把对象赋值给这个list,再在类的其他方法中调用这个list中的元素,就拿到了子进程或者子线程的对象了。

例如:

def startss(self,a1,b1,c1,under,rough,blue,among):         # 创建新线程        p1=threading.Thread(target=self.line01,args=(a1,b1,under,rough,)) #必须加,号         p2=threading.Thread(target=self.line02,args=(a1,c1,under,blue,))        p3=Process(target=self.Process01,args=(under,rough,blue,)) #计算进程         #among是类属性list容器         among.append(p1)        among.append(p2)        among.append(p3)         # 开启新线程        p1.start()        p2.start()         #开启计算用进程        p3.start()

参考资料:https://www.jb51.net/article/185867.htm

python 多进程如何终止或重启子进程

到此这篇关于Python的子线程和子进程是如何手动结束的?的文章就介绍到这了,更多相关Python的子线程和子进程内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


python实现不同电脑之间视频传输功能
Python创建类的方法及成员访问的相关知识总结
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。