Python创建多线程的三种方法

thread模块函数式创建线程

调用thread模块中的start_new_thread()函数来产生新线程。语法如下:
thread.start_new_thread ( function, args[, kwargs] )
参数说明:

  • function - 线程函数。
  • args - 传递给线程函数的参数,他必须是个tuple类型。
  • kwargs - 可选参数。

一言不合上代码:

#-*- coding:utf-8 -*-
import thread
import time
def A(para):
    for i in range(5):
        print para
        time.sleep(0.5)

def B(para):
    for i in range(5):
        print para
        time.sleep(0.2)

if __name__ == '__main__':
    thread.start_new_thread(A, ('我是线程A',))
    thread.start_new_thread(B, ('我是线程B',))
    while 1:
        pass

结果如下:
在这里插入图片描述
PS:我们可以看到,B线程先执行完了,因为我们设置了睡眠时间为0.2秒,A线程等待时间为0.5秒,虽然先运行的A线程,但是在等待的同时会自动切换到B线程,充分利用了CPU的等待时间,关于多线程,一般在IO密集型的场合使用比较多,比如运行爬虫的时候,关于多线程、多进程、多协程的适用场合,后面我会新建一个文章深入研究。

继承threading类创建多线程

继承线程类threading.thread,再重载成员函数run,程序处理的代码写在函数run中,最后再调用start()方法来运行线程
代码如下:

#-*- coding:utf-8 -*-
import threading
import time
'''
获得当前线程的名称
threading.current_thread().getName()
threading.current_thread().name
'''
class A(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        for i in range(5):
            print '我是线程A',threading.current_thread().getName()
            time.sleep(0.5)

class B(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        for i in range(5):
            print '我是线程B',threading.current_thread().name
            time.sleep(0.2)
t1=A()
t1.start()
t2=B()
t2.start()

结果如下:
在这里插入图片描述

threading模块函数式创建线程

创建线程时,传入一个函数,用于线程执行,比起通过类继承创建多线程,函数式创建线程有更好的灵活性。
代码如下:

#encoding:utf-8
import threading
import time
import random

def run(sec):
    time.sleep(sec)
    print'当前线程的名字是: ', threading.current_thread().name

if __name__ == '__main__':
    print'这是主线程:', threading.current_thread().name
    thread_list = []
    '''创建多个线程'''
    for i in range(5):
        t = threading.Thread(target=run,args=(random.random(),))
        thread_list.append(t)
    #循环这5个线程,调用相应的run方法
    for t in thread_list:
        t.start()

结果如下:
在这里插入图片描述

使用总结

关于threading和thread的使用总结:
	threading 模块介绍:
    	1.threading 是对thread模块的再封装
    	2.threading 模块支持守护线程
   		3.threading.Thread(target,args)  创建线程,但没有启动线程
   		4..start()   开启线程
   		5..join()     挂起线程
   		6.当主线程执行完退出时,默认重要的子线程完成后再退出
  	 在thread模块中
   		1.thread.start_new_thread()方法不仅创建了线程而且启动了线程
		2.当主线程执行完退出时,其他的线程都会无警告,无保存的死亡
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值