Python学习之路-----线程

线程

线程和进程一样,也是为了实现多任务而设计出来的。举个例子:打开微信,可以和多个人同时聊天,这就可以用多线程实现。既然进程和线程都可以实现多任务,为什么还要设计出这两种呢?(在这埋个伏笔)

threading模块

实现线程方法1

python的threading模块提供了实现的线程的方法,在使用方法上和mutiprocessing很相似。

#coding=utf-8

import threading
import time

def do_thread(*args):
    print(args)
    time.sleep(1)


if __name__ == '__main__':
    print('-------------main thread begin---------')
    for i in range(5):
        t = threading.Thread(target=do_thread,args=(i,))
        t.start()
    print('-------------main thread over---------')



结果:
-------------main thread begin---------
(0,)
(1,)
(2,)
(3,)
(4,)-------------main thread over---------

上面的例子定义了函数do_thread(*args),主线程中创建了5个线程,具体的语法就是使用threading模块中的Thread类,并将do_thread和元组(i,)作为参数传进去。最后调用start()方法开始线程。分析代码可以看出如果是单线程的方式执行至少需要5秒的时间,采用上述的方法后很快就执行完了。

实现线程方法2

继承Thread类。基本的语法和进程差不多,其中self.name获取的当前线程的名字,也可以使用getName()方法获得。

#coding=utf-8

import threading
import time


class MyThread(threading.Thread):
    def run(self):
        time.sleep(1)
        print('thread name is:%s' % (self.name))

if __name__ == '__main__':
    print('-------------main thread begin---------')
    for i in range(5):
        t = MyThread()
        t.start()
    print('-------------main thread over---------')

结果:
-------------main thread begin---------
-------------main thread over---------
thread name is:Thread-3thread name is:Thread-2
thread name is:Thread-4

thread name is:Thread-1thread name is:Thread-5

以上两种实现线程的方式和进程很相似,和进程同样有join()等方法。

为什么要有进程和线程两种实现多任务的方式呢?借用操作系统的一句话:进程是操作系统分配资源的一种单位,线程是操作系统调度的基本单位。从进程和线程占用资源的角度理解,进程占用的资源比线程更多,一个进程可以创建出多个线程,这几个线程共享来自与当前进程的资源,这一点在多线程访问全局变量时格外明显。

总结:

无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式,如sleep(),join()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值