我是胖超人,chubbysuperman
实现多线程的方法有很多,我只喜欢这一种。先说说思路,后边上代码。
- 写好需要使用多线程的功能。示例代码中为函数:tr
- 定义一个类,继承threading.Thread。示例代码中为:Mythread
- 初始化父类。示例代码中:init(self)
- 重写父类的run方法。
- 获取线程锁。示例代码中:lock.acquire()。注意:此处应为threading.Thread.Lock().acquire(),但是示例代码中已给出锁对象,所以可以写为lock.acquire()
- 调试。
以上为我的思路,下面上代码。
#__author__ = 'chubby_superman'
#_*_coding=utf-8 _*
import threading
import time
#定义一个方法
def tr(a,b):
print([x for x in range(a+b)])
pass
class Mythread(threading.Thread):
#使用继承实现多线程
def __init__(self,func):
threading.Thread.__init__(self)
self.func=func #功能名
#self.args=args #功能所需参数
#初始化父类 threading.Thread
def run(self):
lock = threading.Lock()
if lock.acquire():
self.func #调用run方法,实现功能的多线程
print(self.name,time.ctime())
lock.release()
#给需要实现多线程的功能 加锁。注意:run方法为重写父类threading.Thread的run方法,函数名不得改变,且此方法必须有。
if __name__=="__main__":
thread_list=[]
for i in range(5): #需要开启多少线程,range中的数字填多少,此处需要5个
t = thread_list.append(Mythread(tr(3,4)))
for t in thread_list:
t.start()
for t in thread_list:
t.join()
根据我的理解:其实python中的多线程很鸡肋 因为python解释器的gil锁是单线程的,所以在不解开gil锁的前提下,写多线程屁用没有,如果需要满载cpu,那就得用协程。但是不得不说,对于io密集型任务,多线程还是有他的优势的。当然,仅仅是我这个小菜鸟的理解,欢迎大神指正。