Python核心编程 第18章 多线程

1.对python虚拟机的访问由全局解释器锁来控制,正是这个锁能保证同一时刻只有一个线程在运行。

import threading 
loops = [4,2];

def loop(nloop, nsec):
    print 'start loop', nloop, 'at:', ctime();
    sleep(nsec);
    print 'loop', nloop, 'done at:', ctime();

def main():
    print 'starting at:', ctime();
    threads = [];
    nloops = range(len(loops));
    
    for i in nloops:
        t = threading.Thread(target=loop, args=(i, loops[i]));
        threads.append(t);
    
    for i in nloops:
        threads[i].start();
        
    for i in nloops:
        threads[i].join(); #join() wait the thread over.
    
    print 'all NONE at:', ctime();
    
if __name__ == '__main__':
    main();  

创建一个Thread的实例,传给它一个可调用的类对象。


loops = [4,2];

class ThreadFunc(object):
    def __init__(self, func, args, name=''):
        self.name = name;
        self.func = func;
        self.args = args;
    
    def __call__(self):
        apply(self.func, self.args);

def loop(nloop, nsec):
    print 'start loop', nloop, 'at:', ctime();
    sleep(nsec);
    print 'loop', nloop, 'done at:', ctime();

def main():
    print 'starting at:', ctime();
    threads = [];
    nloops = range(len(loops));
    
    for i in nloops:
        t = threading.Thread(target=ThreadFunc(loop, (i, loops[i]), loop.__name__));
        threads.append(t);
    
    for i in nloops:
        threads[i].start();
        
    for i in nloops:
        threads[i].join(); #join() wait the thread over.
    
    print 'all NONE at:', ctime();
    
if __name__ == '__main__':
    main();     

创建新线程的时候,Thread对象会调用ThreadFunc对象,这时会用到一个特殊函数__call__()。


从Thread派生出一个子类,创建一个这个子类的实例。


loops = (4,2);

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):
        apply(self.func, self.args);

def loop(nloop, nsec):
    print 'start loop', nloop, 'at:', ctime();
    sleep(nsec);
    print 'loop', nloop, 'done at:', ctime();

def main():
    print 'starting 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(); #join() wait the thread over.
    
    print 'all NONE at:', ctime();
    
if __name__ == '__main__':
    main();     


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值