1.从数据库中读取出来的记录是多条的,我现在想一条线程来分析一条记录的相关信息情况。所以先将多线程的内容学好再说!
19.2 线程状态:生命期
一个程序开始执行就表示了主线程开始执行,每个线程都可以去创建和启动其他线程。
多线程是使用了threading模块中的类和函数的。一个类从这个基类继乘之后会覆盖掉基类中的run方法的。
这个方法就是实现这个线程要执行什么任务的。
import threading
class Test(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
print 'thread is running'
if __name__ == '__main__':
ob = Test()
ob.start()
可以看到只需要继承我们的多线程模块然后调用了其中的start就可以直接运行多线程了。
将其进行一次简单的修改之后:
import threading
class Test(threading.Thread):
def __init__(self,str):
threading.Thread.__init__(self)
self.str = str
def run(self):
print self.str
if __name__ == '__main__':
printName = ['one','two']
checkThreads = []
for line in printName:
# print line
thread = Test(line)
checkThreads.append(thread)
for t in checkThreads:
# t.setDaemon(True)
t.start()
具体实现什么功能是交给了start()方法进行操作的哦!
如果running 线程中调用了另一个线程的join方法的话,它必须要等待到那个加进来的线程死掉以后才能继续自己的动作的。我们会指定join中的一个参数值。表示的是:等待多少时间如果还没有反应的话就自动退出了。
示例:
import threading
import time
import random
class PrintThread(threading.Thread):
def __init__(self,threadName):
threading.Thread.__init__(self,name=threadName)
self.sleepTime = random.randrange(1,6)
print "Name:%s;sleep:%d" % (self.getName(),self.sleepTime )
def run(self):
time.sleep(self.sleepTime)
print self.getName(),"doing sleep"
if __name__ == '__main__':
thread1=PrintThread('thread1')
thread2=PrintThread('thread2')
thread3=PrintThread('thread3')
thread1.start()
thread2.start()
thread3.start()
线程同步:
最简单的一个机制就是加锁操作了!
锁对象用threading.RLock类创建的 有两个方法一个是 acquire(获得)和release(释放)
线程一旦调用 了acquire锁进入到locked状态的。
多线程程序中线程必须首先获得一个锁,再进入临界区;退出临界区要释放掉锁的。
阅读(1186) | 评论(0) | 转发(0) |