与进程相关的模块
使用main进程创建子进程
from multiprocessing import Process
import os
def func():
print("这是一个func函数,进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
if __name__ == '__main__':
print("这是主函数:进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
p = Process(target=func)
p.start()
可以给子进程传递参数,传递的格式是一个元组
from multiprocessing import Process
import time
import os
def func(i):
print("这是一个func函数,进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
print("{}".format(i))
if __name__ == '__main__':
print("这是主函数:进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
p = Process(target=func,args=(123,))
p.start()
不能获取子进程的返回值
可以同时开启多个子进程,同时开启的子进程并发执行
from multiprocessing import Process
import time
import os
def func1(i):
print("这是一个func1函数,进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
print("{}".format(i))
def func2(i):
print("这是一个func2函数,进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
print("{}".format(i))
if __name__ == '__main__':
print("这是主函数:进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
p = Process(target=func1,args=(123,))
p2 = Process(target=func2,args=("456",))
p.start()
p2.start()
阻塞其他进程,只有当join的进程运行完毕之后才可以执行后续进程
from multiprocessing import Process
import time
import os
def func1(name,age):
print("发送邮件给{}岁的{}".format(name,age))
time.sleep(1)
print("发送完毕!{}".format(name))
if __name__ == '__main__':
print("这是主函数:进程号为:{},父进程号为:{}".format(os.getpid(),os.getppid()))
list_new = [("a",12),("b",11),("c",10),("d",9)]
for arg in list_new:
p = Process(target=func1,args=arg)
p.start()
p.join()
print("所有邮件全部发送完毕!")
多个进程之间数据不共享
from multiprocessing import Process
n = 0
def fuc():
global n
n += 1
if __name__ == '__main__':
list_new = []
for i in range(100):
p = Process(target=fuc)
p.start()
list_new.append(p)
for i in list_new:
i.join()
print(n)
import os
from multiprocessing import Process
class Myprocess(Process):
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c
super().__init__()
def run(self):
print("子进程:{}父进程:{}".format(os.getpid(),os.getppid()))
print("{}|{}|{}".format(self.a,self.b,self.c))
if __name__ == '__main__':
print("这是主进程")
p = Myprocess(45,56,67)
p.start()
p.pid p.ident 查看进程号
p.name 查看进程名
p.daemon 设置进程为守护进程
p.terminate 结束进程
p.is_alive 查看进程是否为活跃状态
import os
import time
from multiprocessing import Process
class Myprocess(Process):
def __init__(self,a,b,c):
self.a = a
self.b = b
self.c = c
super().__init__()
def run(self):
print("子进程:{}父进程:{}".format(os.getpid(),os.getppid()))
print("{}|{}|{}".format(self.a,self.b,self.c))
if __name__ == '__main__':
print("这是主进程")
p = Myprocess(45,56,67)
p.daemon = True
print(p.name)
p.is_alive()
time.sleep(1)
p.start()
print(p.pid,p.ident)
p.terminate()
p.is_alive()