当前位置: 首页 > news >正文

Python多进程(multiprocessing)(mp)(一) —— 进程的创建 join()方法

即使是单核CPU,也能执行多任务

进程&线程

       对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程

      有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。

进程

      程序编写完没有运行称之为程序。正在运行的代码就是进程。

      在 Python3 语言中,对多进程支持的是 multiprocessing 模块和 subprocess 模块。 multiprocessing 模块为在子进程中运行任务、通讯和共享数据,以及执行各种形式的同步提供支持

创建进程

       Python 提供了非常好用的多进程包 multiprocessing,只需要定义一个函数, Python 会完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。 multiprocessing支持子进程、通信和共享数据

Process(group, target ,name , args , kwargs)

      其中 target 表示调用对象, args 表示调用对象的位置参数元组。 kwargs 表示调用对象的字典。 name 为别名。 group 参数未使用,值始终为 None

创建子进程并执行

from multiprocessing import Process
#定义子进程代码
def run_proc():
	print('子进程运行中')

if __name__ == '__main__':
	print('父进程运行')
	p=Process(target=run_proc)
	print('子进程将要执行')
	p.start()

这里if __name__ == '__main__' 不能没有

创建子进程,传递参数

from multiprocessing import Process
import os
from time import sleep
#创建子进程代码

def run_proc(name,age,**kwargs):
	for i in range(5):
		print('子进程运行中,参数 name: %s,age:%d'%(name,age))
		print('字典参数 kwargs: ',kwargs)
		sleep(0.5)

if __name__=='__main__':
	print('主进程开始运行')
	p=Process(target=run_proc,args=('test',18),kwargs={'m':23})
	print('子进程将要执行')
	p.start()

join()方法的使用

join方法是主进程等待调用join方法的子进程终止

from multiprocessing import Process
from time import sleep

def worker(interval):
	print("work start")
	sleep(interval)
	print("work end")

if __name__ == "__main__":
	print('主进程正在执行')
	#创建子进程
	p = Process(target = worker, args = (3,))   #记住这里,如果传递的元组是1个元组,记得加逗号
	p.start()
	#等待进程 p 终止
	p.join()
	#等子进程执行完后再输出
	print("主进程结束!")

join可以带一个timeout参数,意思是我就等你这些时间,如果这些时间你结束不了,我主进程就继续向下执行

from multiprocessing import Process
from time import sleep

def worker(interval):
	print("work start")
	sleep(interval)
	print("work end")

if __name__ == "__main__":
	print('主进程正在执行')
	p = Process(target = worker, args = (5,))
	p.start()
	#等待进程 p 终止
	p.join(3)
	print("主进程结束!")

让线程睡眠5s,而主进程就等3s,没等到就向下执行了

相关文章:

  • Python多进程(multiprocessing)(mp)(二) —— 创建多进程 继承process类 进程池(Pool)
  • Python多进程(multiprocessing)(mp)(三) —— 进程间通信 Queue队列(Manager)
  • Python多线程(二): 线程同步 生产者消费者模式 ThreadLocal线程局部变量
  • 爬虫url去重策略
  • 爬虫中的深搜和广搜
  • Objective-C
  • MyOS(四):让内核突破512字节的限制
  • Go语言实现并发(协程)
  • 汇编语言相关知识
  • 面向对象的意义
  • 文本大数据挖掘项目(Go语言)
  • Python网络编程
  • CUDA与cuDNN
  • AI中的搜索(一)——启发式搜索 ((贪婪)最佳优先搜索 (Greedy)Best-First Search、A* 、迭代加深搜索 和 IDA* )
  • AI中的搜索(二)——对抗搜索(最小最大搜索Minimax、Alpha-Beta剪枝搜索、蒙特卡洛树搜索MCTS)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 「译」Node.js Streams 基础
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • avalon2.2的VM生成过程
  • create-react-app做的留言板
  • Electron入门介绍
  • Git初体验
  • iOS小技巧之UIImagePickerController实现头像选择
  • Just for fun——迅速写完快速排序
  • python大佬养成计划----difflib模块
  • rabbitmq延迟消息示例
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue:响应原理
  • 爱情 北京女病人
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 前言-如何学习区块链
  • 收藏好这篇,别再只说“数据劫持”了
  • 王永庆:技术创新改变教育未来
  • 学习HTTP相关知识笔记
  • 异步
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • . Flume面试题
  • .jks文件(JAVA KeyStore)
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Framework .NET Core与 .NET 的区别
  • .NET Framework杂记
  • .NET gRPC 和RESTful简单对比
  • .net连接MySQL的方法
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • :中兴通讯为何成功
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [100天算法】-实现 strStr()(day 52)
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [bzoj 3534][Sdoi2014] 重建
  • [CareerCup] 13.1 Print Last K Lines 打印最后K行
  • [docker] Docker的私有仓库部署——Harbor