# multiprocessing多元的处理进程的模块
from multiprocessing import Process
# from multiprocessing import process
import os
def func():#
print(os.getpid(), os.getppid()) # pid process id ppid parent process id
if __name__ == '__main__':
print('main', os.getpid(), os.getppid())
p = Process(target=func)
p.start() # 开启了一个子进程
# # multiprocessing多元的处理进程的模块
# from multiprocessing import Process
# # from multiprocessing import process
# import os
#
#
# def func(name, age): #
# print(os.getpid(), os.getppid(), name, age) # pid process id ppid parent process id
#
#
# # print(123)
# if __name__ == '__main__':
# print('main', os.getpid(), os.getppid())
# p = Process(target=func, args=('alex', 18))
# p.start() # 开启了一个子进程
为什么要用if name == ‘main’
进程之间所有的内存是隔离的
能不能给子进程传递参数
可以
能不能获取子进程的返回值
不能
#能不能同时开启多个子进程
可以
```python
from multiprocessing import Process
# from multiprocessing import process
import os
import time
def func(name, age): #
print('%s start' % name)
time.sleep(1)
print(os.getpid(), os.getppid(), name, age) # pid process id ppid parent process id
# print(123)
if __name__ == '__main__':
print('main', os.getpid(), os.getppid())
arg_lst = [('alex', 84), ('tom', 84), ('jane', 18)]
# 并发异步
p = Process(target=func, args=('alex', 18))
for arg in arg_lst:
p = Process(target=func, args=arg)
p.start() # 开启了一个子进程 #异步非阻塞,不等待start结果,继续向下执行
# print('hhh')
# p = Process(target=func, args=('jane', 18))
# p.start() # 开启了一个子进程
# p = Process(target=func, args=('tom', 18))
# p.start() # 开启了一个子进程
#join的用法
import os
import time
from multiprocessing import Process
def func(name, age):
print('send one email to %s age %s\n' % (age, name))
time.sleep(1)
print('send over')
# print(os.getpid(), os.getppid(), name, age)
if __name__ == '__main__':
# print('main', os.getpid(), os.getppid())
arg_lst = [('jane', 18), ('tom', 45), ('erhe', 67)]
p_lst=[]
for arg in arg_lst:
p = Process(target=func, args=arg)
p.start()
p_lst.append(p)
for p in p_lst:
p.join()
print('所有的邮件已经发送完毕')
# 异步非阻塞
# 同步阻塞:join
##非阻塞:start
#进程之间的数据是隔离的
from multiprocessing import Process
n=0
def func():
global n
n=n+1
if __name__=='__main__':
p_lst=[]
for i in range(100):
p=Process(target=func)
p.start()
p_lst.append(p)
for p in p_lst:p.join()
print(n)
在使用多进程实现一个并发的socket的server
server.py
import socket
from multiprocessing import Process
def talk(conn):
while True:
msg = conn.recv(1024).decode('utf-8')
ret = msg.upper().encode('utf-8')
conn.send(ret)
conn.close()
if __name__ == '__main__':
sk = socket.socket()
sk.bind(('127.0.0.1', 9003))
sk.listen()
while True:
conn, addr = sk.accept()
Process(target=talk, args=(conn,)).start()
sk.close()
client.py
import socket
import time
sk=socket.socket()
sk.connect(('127.0.0.1',9003))
while True:
sk.send(b'hello')
msg=sk.recv(1024).decode('utf-8')
print(msg)
time.sleep(0.5)
sk.close()
开启进程的另一种方式用类开启
import os
from multiprocessing import Process
import time
class MyProcess(Process):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
super().__init__()
def run(self):
time.sleep(1)
print(os.getppid(), os.getpid(),self.a,self.b,self.c)
if __name__ == '__main__':
print('-->', os.getpid())
for i in range(10):
p = MyProcess(1,2,3)
p.start()
Pocess中的其他方法
import os
from multiprocessing import Process
import time
class MyProcess(Process):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
super().__init__()
def run(self):
time.sleep(1)
print(os.getppid(), os.getpid(), self.a, self.b, self.c)
if __name__ == '__main__':
print('-->', os.getpid())
p = MyProcess(1, 2, 3)
p.start()
print(p.pid)
print(p.name)
print(p.ident)
print(p.is_alive())
p.terminate() # 强制结束一个子进程,异步非阻塞
time.sleep(0.01)
print(p.is_alive())