python线程settrace函数求指点

Idkey 2013-12-16 03:24:27
import sys
import os
import threading

class WorkingThread(threading.Thread):
def __init__(self, *args, **kargs):
threading.Thread.__init__(self, *args, **kargs)
self._operation = 0 # 0,nothing;1,suspend;2,resume;3,kill;

def start(self):
threading.settrace(self.calltrace)
threading.Thread.start(self)

def run(self):
x=0
while(True):
time.sleep(1)
print x
x+=1
os._exit(0)

def linetrace(self, frame, event, arg):
global FLAG_STATE
print 'Run flag'
if event == 'line':
if self._operation == 3:
raise SystemExit()
elif self._operation == 1:
while FLAG_STATE == 1:
time.sleep(0.1)


def calltrace(self, frame, event, arg):
if event == 'call':
return self.linetrace

def kill(self):
self._operation = 3

def suspend(self):
self._operation = 1

def resume(self):
self._operation = 2

if (__name__ == '__main__'):
workingThread = WorkingThread()
workingThread.start()

上面的代码是派生了一个线程类,然后启动。其中跟踪函数部分有一些疑问不太明白,查了三四天实在搜索不到什么有用的信息,求指点。

具体问题如下,
1,threading.settrace(self.calltrace) ,这个函数的详细信息不明白。 在这个例子中threading.settrace(self.calltrace)的执行次数和
while(True):
time.sleep(1)
print x
x+=1
循环体中语句是关联的,但是为什么循环体外面的x=0没有触发执行threading.settrace(self.calltrace)

2,在下面的定义中,参数frame和event代表了什么? 我并没有传入'call'的值,为什么calltrace和linetrace中的语句仍然会执行?
def calltrace(self, frame, event, arg):
if event == 'call':
return self.linetrace
...全文
226 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧