思路:
将所需引用的外部函数名定义为变量并写入列表,因为受限于处理器,所以对列表进行分割操作,从而迎合处理进程数量
1.引用
import multiprocessing as mp
import hanshu #外部文件
外部文件:
def a():
h = "标题a"
l = "link"
return h,l
def b():
h = "标题b"
l = "link"
return h,l
def c():
h = "标题c"
l = "link"
return h,l
def d():
h = "标题d"
l = "link"
return h,l
2.处理数据
# 分割
data = ["a", "b", "c", "d"] #外部所引用的函数名
Data = [] #分割后的列
n = 2 # 线程数
for i in range(0, len(data), n):
Data.append(data[i:i + n])
3.定义工作组
# 此时的Data数据为原始列表分割后的列表,包含子列表
def job(Data):
for data in Data:
for i in data: # 得到子列
function(i)
4.功能函数
# 功能函数,传入值n即为变量函数名
def function(n):
h,l= eval('hanshu.'+n+'()') #eval函数返回执行代码结果:hanshu.n()
print(h)
return h,l
5.多进程并发
def multcore(Data:list):
for x in Data: # 此时列包含子列,且每个子列存两个值
d = 0
for i in x:
d += 1
p = mp.Process(target=job, args=(i,))
p.start()
p.join()
6.完整代码
import multiprocessing as mp
import hanshu
# 分割
data = ["a", "b", "c", "d"]
Data = []
n = 2 # 线程数
for i in range(0, len(data), n):
Data.append(data[i:i + n])
def job(Data):
for data in Data:
for i in data:
function(i)
def multcore(Data:list):
for x in Data:
d = 0
for i in x:
d += 1
p = mp.Process(target=job, args=(i,))
p.start()
p.join()
# 执行功能
def function(n):
h,l= eval('hanshu.'+n+'()')
print(h)
return h,l
if __name__ == '__main__':
multcore(data)
运行结果: