天天看点

python基础--Python多线程的使用,Threading

    多线程,多线程,多线程-----箴言-----

内容简介:

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

说明:可见,交替打印,说明线程在同时运行。

欢迎点赞,转发,加评论 :)

继续阅读