线程间的信息共享和通信更加容易。线程一般是以并发方式执行的,正是由于这种并行和数据共享机制,使得多任务间的协作成为可能。当然,在单核 CPU 系统中,因为真正的并发是不可能的,所以线程的执行实际上是这样规划的:每个线程运行一小会儿,然后让步给其他线程(再次排队等待更多的 CPU 时间)。在整个进程的执行过程中,每个线程执行它自己特定的任务,在必要时和其他线程进行结果通信。
当然,这种共享并不是没有风险的。如果两个或多个线程访问同一片数据,由于数据访问顺序不同,可能导致结果不一致。这种情况通常称为竞态条件(race condition)。所以大多数线程库都有一些同步原语,以允许线程管理器控制执行和访问。
# coding:utf-8
import threading
from time import sleep, ctime
loops = (4, 2)
派生子类,重写run方法
class Mythread(threading.Thread):
def __init__(self, func, args, name=''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
def run(self):
self.func(*self.args)
多线程运行的函数
defloop(nloop, nsec):print'start loop', nloop, 'at:', ctime()
sleep(nsec)
print'loop', nloop, 'done at:', ctime()
defmain():print'startig at:', ctime()
threads = []
nloops = range(len(loops))
for i in nloops:
t = Mythread(loop, (i, loops[i]), loop.__name__)
threads.append(t)
for i in nloops:
threads[i].start()
for i in nloops:
threads[i].join()
print'all done at:', ctime()
if __name__ == '__main__':
main()