Python的子线程和子进程是如何手动结束的?
短信预约 -IT技能 免费直播动态提醒
如何结束Python的子线程和子进程
结束子线程的方法:
这个是搬运其他大神的代码,鄙人也不知道原理,反正拿来主义,暂时没发现什么缺点,先用着再说。
import inspect
import ctypes
import threading
from 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 inspect
import ctypes
from time import sleep
from 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的子线程和子进程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341