python多进程和多线程

线程Thread是进程的实体,是CPU调度和分配的基本单元,是真正可执行的单元。我们运行任何一个python程序,至少都会启动一个主进程和一个主线程。在主进程的基础上,可以生成多个子进程。假如我日志拆分里,进程池为4,那么其实同时存在5个进程,1个主进程和4个并发的子进程。并且我们通常会为每个子进程执行join()函数,就是让主进程等待子进程执行完毕,才结束。

 

1. 多进程的实现方式

因为windows和linux生成进程的方式有所不同,所以一般我们使用封装好的multiprocess.process模块,这个模块在两种系统中都可以执行。

 

from multiprocessing import Process, Queue
import os


# 子进程要执行的代码
def run_process(q: Queue):
print("子进程开始")
q.put(os.getpid())

if __name__=='__main__':
q = Queue()
p = Process(target=run_process, args=(q,))
p.start()
p.join()
result = q.get()
print('子进程结果:{}'.format(result))

标准的进程生成方式,
1、Process(target, args)配置执行函数及参数
2、start
3、join
4、获取返回值(如果没有返回则无需理会)

2、多进程另外的方式,使用Pool有两个好处:快速生成多个进程,并且可以控制同时存在的最大进程数。并且用apply_async可以方便的获取返回值。

pool = multiprocessing.Pool(processes=6)
tasks = []
for area in areas:
tasks.append(pool.apply_async(split_area, (area, last_timestamp, year, month, day, clear, last_job)))
pool.close()

output = []
for p in tasks:
try:
output.append(p.get()) #获取结果,同时可以看进程是否执行成功
except Exception as e:
print(e)

for tup in output:
a = tup[0]
t = tup[1]

pool.join()



posted @ 2022-02-08 15:13  yjy888  阅读(248)  评论(0编辑  收藏  举报