使用python创建进程
from multiprocessing import Process
import time
def task(name):
print(name, '我是一个进程')
time.sleep(3)
print(name, '我现在运行完成啦')
if __name__ == '__main__':
process1 = Process(target=task, args=('子进程1号说>>>:',))
process1.start()
print('我是主进程')
'''
返回结果:
我是主进程
子进程1号说>>>: 我是一个进程
子进程1号说>>>: 我现在运行完成啦
整个main里面的执行过程说明:
1.创建一个进程对象
2.启动进程,告诉操作系统创建一个新的进程 并在该进程中执行task函数(异步)
3.打印“我是主进程”字符串(同步)
4.执行进程内部的函数体代码
'''
进程间的数据隔离
from multiprocessing import Process
import time
money = 1000
def task():
global money
money = 666
print('我是子进程task,我在查看变量money>>>:', money)
if __name__ == '__main__':
print('函数执行前>>>:', money)
task()
print('函数执行后>>>:', money)
'''
函数执行前>>>: 1000
我是子进程task,我在查看变量money>>>: 666
函数执行后>>>: 666
'''
if __name__ == '__main__':
process1 = Process(target=task, )
process1.start()
time.sleep(3)
print(money)
'''
此时的函数返回值:
我是子进程task,我在查看变量money>>>: 666
1000
这里就说明了什么是进程间的数据隔离
'''
进程join方法
from multiprocessing import Process
import time
def task(name, n=3):
print('%s is running' % name)
time.sleep(n)
print('%s is over' % name)
if __name__ == '__main__':
process1 = Process(target=task, args=('子进程1号>>>:', 1))
process2 = Process(target=task, args=('子进程2号>>>:', 2))
process3 = Process(target=task, args=('子进程3号>>>:', 3))
start_time = time.time()
process1.start()
process2.start()
process3.start()
process1.join()
process2.join()
process3.join()
print('我是主进程')
print('我的执行时间>>>:', time.time() - start_time)
'''
返回值:
子进程1号>>>: is running # 进程1号占用时间1秒
子进程2号>>>: is running # 进程2号占用时间2秒
子进程3号>>>: is running # 进程3号占用时间3秒
子进程1号>>>: is over
子进程2号>>>: is over
子进程3号>>>: is over
我是主进程
我的执行时间>>>: 3.185295581817627 # 三个进程执行时间为3秒出头
结论:
1. 三个子进程执行完成以后,主进程才执行。
2. 三个进程并非是执行完一个再执行下一个,都是先创建好并执行函数体代码,但返回值的时候,是一个一个返回。
'''
进程间通信的方法
'''
根据之前的实验得知,进程间严格意义上说是不能通信的(默认),但是也有方法可以通信(或者说传递数据),那就是使用消息队列,进程将产生的数据放到消息队列中,其他进程再去消息队列中取。
下面初步介绍一下Queue的简单用法:
'''
from multiprocessing import Queue
q = Queue(3)
q.put('我是第一个')
print(q.full())
q.put('我是第二个')
q.put('我是第三个')
print(q.full())
print(q.empty())
查看进程的多种方法
from multiprocessing import Process, current_process
import os
def task():
print(current_process())
print(current_process().pid)
if __name__ == '__main__':
p1 = Process(target=task)
p1.start()
print(current_process())
print(current_process().pid)
print(os.getpid())
print(os.getppid())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类