python中对线程的运行和停止怎么实现


 

 

一、启动线程

启动太简单了,随便一篇python教程有关多线程的讲解都会讲到;

二、停止线程

这里分享2种思路,

 

方法1:(亲测可用,就是有点繁琐了) 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import inspect
import ctypes
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)

定义完上面的2个函数后,如下一样调用即可

stop_thread(myThread)

 

 

(方法2)(亲测可用,就是基本思路,全局变量的使用,python 的基本知识)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import threading
import time
class MyThread(threading.Thread):
   def __init__( self ):
     threading.Thread.__init__( self )
     self .Flag = True        #停止标志位
     self .Parm = 0         #用来被外部访问的
   
   
   def run( self ):
     while ( True ):
       if ( not self .Flag):
         break
       else :
         time.sleep( 2 )
   
   def setFlag( self ,parm):     #外部停止线程的操作函数
     self .Flag = parm #boolean
  
   def setParm( self ,parm):     #外部修改内部信息函数
     self .Parm = parm
  
   def getParm( self ):       #外部获得内部信息函数
     return self .Parm
  
  
if __name__ = = "__main__" :
   testThread = MyThread()
   testThread.setDaemon( True )     #设为保护线程,主进程结束会关闭线程
 
   testThread.start()       #开始线程
 
   time.sleep( 2 )          #主进程休眠 2 秒
   testThread.setFlag( False )   #修改线程运行状态
   time.sleep( 2 )         
   print (testThread.is_alive())  #查看线程运行状态

 

1
2
3
4
def __init__( self ):
     self .Flag = True        #停止标志位
     self .Parm = 0         #用来被外部访问的
     #自行添加参数

 

1
2
3
4
5
def __init__( self ):
     threading.Thread.__init__( self )
     self .Flag = True        #停止标志位
     self .Parm = 0         #用来被外部访问的
   


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM