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,没等到就向下执行了

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,多进程之间不能直接共享全局变量。但是,可以使用一些特殊的方法来实现进程之间的共享数据。 其中一个方法是使用共享内存,Python中的multiprocessing模块提供了Value和Array两种共享内存的方式。 Value用于表示单个值,而Array用于表示多个值的数组。这两种方式都可以在多个进程之间共享数据。 下面是一个使用multiprocessing模块实现进程之间共享全局变量的示例代码: ```python import multiprocessing as mp # 定义全局变量 global_var = mp.Value('i', 0) # 定义进程函数 def func(): # 获取全局变量 global global_var # 修改全局变量 global_var.value += 1 if __name__ == '__main__': # 创建进程 p = mp.Process(target=func) # 启动进程 p.start() # 等待进程结束 p.join() # 输出全局变量的值 print(global_var.value) ``` 在这个示例代码中,我们使用了Value来定义一个名为global_var的全局变量,并将其初始值设置为0。然后,我们定义了一个进程函数func,在这个函数中,我们通过global关键字来获取全局变量global_var,并将其值加1。 最后,我们创建了一个进程,启动它,并等待它结束。然后,我们输出全局变量global_var的值,这个值应该为1。 需要注意的是,由于多个进程同时访问全局变量可能会导致数据竞争和不一致的问题,因此在修改全局变量时需要使用锁来保证数据的一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值