多线程,多线程,多线程-----箴言-----
内容简介:
python语言当然支持多线程。在Python中,多线程可以使用thread和threading模块来实现,其中,thread是旧版本的接口,在python3中已经废弃,为了向前兼容,python3将其改名为_thread,不再推荐使用。而threading模块是在thread之上进行了封装,也是推荐使用的多线程模块,本节内容主要基于threading模块进行介绍。
线程的创建
Threading模块中每个线程都是一个Thread对象,创建一个线程有两种方式,一种是将方法传递到Thread对象中执行,另一种是从Thread继承,然后重写run方法,就像Java一样,因为python也支持面向对象)。
下面介绍第一种方式:将方法传递到Thread对象中执行。
例子程序如下:
功能:在两个不同的线程中分别执行求和,求平均数的方法。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import threading
import time
#功能:求data中的数据的和,data是一个list。
def sum(data):
print("sum data===begin==");
sum_res = 0;
print("input data of sum:");
for i in range(len(data)):
time.sleep(1); #延时1s
print('data in sum_res',data[i]);
sum_res = sum_res + (int)(data[i]); #求和,注意需要用int进行数字字符的转换
print("input data of sum_res:",sum_res);
return sum_res;
#功能:求平均数,取整,data是一个list。
def ave(data):
print("ave data===begin==");
sum_res = 0;
for i in range(len(data)):
time.sleep(1); #延时1s
print('data in ave',data[i]);
sum_res = sum_res + (int)(data[i]); #求和,注意需要用int进行数字字符的转换
data_len = len(data);
ave_res = sum_res/data_len;
print('ave_res=',ave_res);
return ave_res;
#test
def test_func():
d1_list=[];
i = 0;
while i<5:
d1_list.append(i);
i= i + 1;
d2_list=[];
while i<10:
d2_list.append(i);
i= i +1;
sum_thread = threading.Thread(target=sum,args=(d1_list,));
ave_thread = threading.Thread(target=ave,args=(d2_list,))
sum_thread.start();
ave_thread.start();
#main
if __name__ == '__main__':
#创建thread
test_func();
运行结果:
aaaaa:chaper user$ python test_thread.py
sum data===begin==
input data of sum:
ave data===begin==
data in sum_res 0
data in ave 5
data in sum_res 1
data in ave 6
data in sum_res 2
data in ave 7
data in sum_res 3
data in ave 8
data in sum_res 4
input data of sum_res: 10
data in ave 9
ave_res= 7.0
说明:可见,交替打印,说明线程在同时运行。
欢迎点赞,转发,加评论 :)