如何結(jié)束Python的子線程和子進(jìn)程
結(jié)束子線程的方法:
這個(gè)是搬運(yùn)其他大神的代碼,鄙人也不知道原理,反正拿來主義,暫時(shí)沒發(fā)現(xiàn)什么缺點(diǎn),先用著再說。
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()
下面是結(jié)束子進(jìn)程的方法:
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("停止子進(jìn)程")
break
sleep(1)
if __name__ == '__main__':
Air()
這里說一下如果用類的話要如何寫,想結(jié)束子進(jìn)程或者子線程就需要拿到進(jìn)程對(duì)象或者線程對(duì)象,但是類中沒辦法實(shí)現(xiàn)創(chuàng)建一個(gè)類屬性的方式然后用self.×××的方式來在其他類方法中調(diào)用,這時(shí)候就創(chuàng)建一個(gè)類屬性list,然后創(chuàng)建好子進(jìn)程或者子線程后把對(duì)象賦值給這個(gè)list,再在類的其他方法中調(diào)用這個(gè)list中的元素,就拿到了子進(jìn)程或者子線程的對(duì)象了。
例如:
def startss(self,a1,b1,c1,under,rough,blue,among):
# 創(chuàng)建新線程
p1=threading.Thread(target=self.line01,args=(a1,b1,under,rough,)) #必須加,號(hào)
p2=threading.Thread(target=self.line02,args=(a1,c1,under,blue,))
p3=Process(target=self.Process01,args=(under,rough,blue,)) #計(jì)算進(jìn)程
#among是類屬性list容器
among.append(p1)
among.append(p2)
among.append(p3)
# 開啟新線程
p1.start()
p2.start()
#開啟計(jì)算用進(jìn)程
p3.start()
參考資料:https://www.jb51.net/article/185867.htm
python 多進(jìn)程如何終止或重啟子進(jìn)程
到此這篇關(guān)于Python的子線程和子進(jìn)程是如何手動(dòng)結(jié)束的?的文章就介紹到這了,更多相關(guān)Python的子線程和子進(jìn)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python子線程如何有序執(zhí)行
- 解決python父線程關(guān)閉后子線程不關(guān)閉問題
- Python 多線程,threading模塊,創(chuàng)建子線程的兩種方式示例
- 如何用 Python 子進(jìn)程關(guān)閉 Excel 自動(dòng)化中的彈窗
- python清理子進(jìn)程機(jī)制剖析
- python使用Queue在多個(gè)子進(jìn)程間交換數(shù)據(jù)的方法