📄 thread2.py
字号:
#!/usr/bin/python -uimport string, sys, timeimport threadfrom threading import Thread, Lockimport libxml2THREADS_COUNT = 15failed = 0class ErrorHandler: def __init__(self): self.errors = [] self.lock = Lock() def handler(self,ctx,str): self.lock.acquire() self.errors.append(str) self.lock.release()def getLineNumbersDefault(): old = libxml2.lineNumbersDefault(0) libxml2.lineNumbersDefault(old) return olddef test(expectedLineNumbersDefault): time.sleep(1) global failed # check a per thread-global if expectedLineNumbersDefault != getLineNumbersDefault(): failed = 1 print "FAILED to obtain correct value for " \ "lineNumbersDefault in thread %d" % thread.get_ident() # check ther global error handler # (which is NOT per-thread in the python bindings) try: doc = libxml2.parseFile("bad.xml") except: pass else: assert "failed"# global error handlereh = ErrorHandler()libxml2.registerErrorHandler(eh.handler,"")# set on the main thread onlylibxml2.lineNumbersDefault(1) test(1)ec = len(eh.errors)if ec == 0: print "FAILED: should have obtained errors" sys.exit(1)ts = []for i in range(THREADS_COUNT): # expect 0 for lineNumbersDefault because # the new value has been set on the main thread only ts.append(Thread(target=test,args=(0,)))for t in ts: t.start()for t in ts: t.join()if len(eh.errors) != ec+THREADS_COUNT*ec: print "FAILED: did not obtain the correct number of errors" sys.exit(1)# set lineNumbersDefault for future new threadslibxml2.thrDefLineNumbersDefaultValue(1)ts = []for i in range(THREADS_COUNT): # expect 1 for lineNumbersDefault ts.append(Thread(target=test,args=(1,)))for t in ts: t.start()for t in ts: t.join()if len(eh.errors) != ec+THREADS_COUNT*ec*2: print "FAILED: did not obtain the correct number of errors" sys.exit(1)if failed: print "FAILED" sys.exit(1)# Memory debug specificlibxml2.cleanupParser()if libxml2.debugMemory(1) == 0: print "OK"else: print "Memory leak %d bytes" % (libxml2.debugMemory(1)) libxml2.dumpMemory()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -