python基础--python中的多进程模块Multiprocessing的Process类

    尽可能不让CPU空闲。-----箴言-----

1. 内容简介:
进程是计算机为CPU分配资源的单位,Python支持多进程。
Python通过Multiprocessing中的Process类来进行进程的创建和管理。

Process的声明:
Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动)
通过Process的start方法来启动一个进程。

2. 实践:

例子程序:在两个不同的进程中处理不同的业务。

python脚本代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
#多进程举例:

import os
import sys
import time
from multiprocessing import Process

#功能:求data中的数据的和,data是一个list
def sum(data):
	res = 0;
	print("input data of sum:");
	for i in range(len(data)):
		time.sleep(1);              #延时1s
		res = res + (int)(data[i]); #求和,注意需要用int进行数字字符的转换
	return res;

#功能:求data中的数据的最大值,data是一个list
def mymax(data):
	res = 0;
	print("input data of mymax:");
	for i in range(len(data)):
		time.sleep(1);              #延时1s
		print('data in mymax===========',data[i]);
	return max(data);



#开启process
def start_process():
	d_list = []; #二维list
	d1_list = [];
	d2_list = [];

	i = 1;
	while i<20:
		if i<10:
			d1_list.append(i);
			i =i+1;
		else:
			d2_list.append(i);
			i =i+1;

	d_list.append(d1_list);
	# d_list.append(d2_list);
	print(d_list)

	#先后创建两个Process,完成不同的功能。
	p = Process(target=worker_process, args=(d_list,'sum'));
	p.start();

	p1 = Process(target=worker_process, args=(d_list,'addone'));
	p1.start();


#多进程
def worker_process(data_list,op):
	print("data_list len =", len(data_list));
	print("data_list[0] =", data_list[0]);
	if op == 'sum':
		res = sum(data_list[0]);
		print("res=", res);
	else:
		res=mymax(data_list[0]);
		print("max=", res);

#main
if __name__ == '__main__':
	print('多进程测试:');
	start_process();
	


预期结果:

在time.sleep的存在,会进行当前进程的延时,所以,预期结果如下:

在sum和mymax方法中,交替输出:
data in mymax=========== x
data in sum: x

其中,x为当前要处理的数据。

实际测试结果:
 

aaaaa:chaper user1$ python test_process.py 
多进程测试:
[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
data_list len = 1
data_list[0] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
input data of sum:
data_list len = 1
data_list[0] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
input data of mymax:
data in sum 1
data in mymax=========== 1
data in sum 2
data in mymax=========== 2
data in sum 3
data in mymax=========== 3
data in sum 4
data in mymax=========== 4
data in sum 5
data in mymax=========== 5
data in sum 6
data in mymax=========== 6
data in sum 7
data in mymax=========== 7
data in sum 8
data in mymax=========== 8
data in sum 9
res= 45
data in mymax=========== 9
max= 9

和预期结果一致,达到我们的目的。


猜你喜欢

转载自blog.csdn.net/liranke/article/details/114543989