⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread2.py

📁 libxml,在UNIX/LINUX下非常重要的一个库,为XML相关应用提供方便.目前上载的是最新版本,若要取得最新版本,请参考里面的readme.
💻 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 + -