十三、并发编程
并发是一种解耦策略。它帮助我们把做什么(目的)和何时(时机)做分解开。从结构的角度来看,应用程序看起来更像是许多台协同工作的计算机,而不是一个大循环。系统因此会更易于被理解,也更有效率。
1.编写可调整的线程代码 要允许线程数量可调整。在系统运行时允许线程发生变动。允许线程依据吞吐量和系统使用率自我调整。
2.(一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行)
要区分出哪些地方用多线程,哪些地方不需要;使用多线程的地方为了保证数据准确性或者事务一致性,还要考虑加线程锁
mu = threading.Lock() #1、创建一个锁 def lock_test(): #time.sleep(0.1) if mu.acquire(True): #2、获取锁状态,一个线程有锁时,别的线程只能在外面等着 schedule_times = ReadTimes() print schedule_times schedule_times = schedule_times + 1 WriteTimes(schedule_times) mu.release() #3、释放锁
十四、持续改进代码
1.不要指望能够一次写出整洁、漂亮的程序。要编写整洁代码,必须先写肮脏代码,然后再清理它。
2.改进程序应该是渐进的,而不应该是大动其结构,这有很大可能导致程序不可用,采用TDD,每次修改都必须保证系统能像以前一样工作。
十五、junit,说一下unittest.
在说unittest之前,先说几个概念:
TestCase 也就是测试用例
TestSuite 多个测试用例集合在一起,就是TestSuite
TestLoader是用来加载TestCase到TestSuite中的
TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息
import unittest class MyTest(unittest.TestCase): # 继承unittest.TestCase
if __name__ == '__main__': test_suite = unittest.TestSuite()#创建一个测试集合 test_suite.addTest(MyTest('test_run1'))#测试套件中添加测试用例 #test_suite.addTest(unittest.makeSuite(MyTest))#使用makeSuite方法添加所有的测试方法 fp = open('res.html','wb')#打开一个保存结果的html文件 runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='api测试报告',description='测试情况') #生成执行用例的对象 runner.run(test_suite) #执行测试套件