多进程

from multiprocessing import Process
def func():
print(123456)



if __name__ == '__main__':
p = Process(target=func,args=())
p.start()

====================================================================
import time
from multiprocessing import Process
def func(arg1,arg2):
print('*'*arg1)
time.sleep(2)
print('*'*arg2)



if __name__ == '__main__':
p = Process(target=func,args=(10,20))
p.start()
print('======:执行完了')

结果

======:执行完了
**********
********************




join()方法,感知一个子进程的结束,在执行join下边的代码,将异步的程序,变为同步


import time
from multiprocessing import Process
def func(arg1,arg2):
print('*'*arg1)
time.sleep(2)
print('*'*arg2)



if __name__ == '__main__':
p = Process(target=func,args=(10,20))
p.start()
p.join()
print('======:执行完了')

结果

**********
********************
======:执行完了


但是这样的join()会有问题,因为如果加入了循环会出现错误,因为在多个进程的异步开启只后,进程的执行不是顺序的,而join是根据最后一个进程的结束后执行的,但是其他的进程并不一定也结束了
import time
from multiprocessing import Process
def func(arg1,arg2):
print('*'*arg1)
# time.sleep(2)
print('='*arg2)



if __name__ == '__main__':
p_lst = []
for i in range(10):
p = Process(target=func,args=(10,20))
p_lst.append(p)
p.start()
p.join()
print('======:执行完了')

为了解决这个问题需要使用的放发:
import time
from multiprocessing import Process
def func(arg1,arg2):
print('*'*arg1)
# time.sleep(2)
print('='*arg2)



if __name__ == '__main__':
p_lst = []
for i in range(10):
p = Process(target=func,args=(10,20))
p_lst.append(p)
p.start()
[p.join() for p in p_lst]
print('======:执行完了')

这样就相当于一个拦截器,所有的都结束了,在执行下边的代码

多进程的另一种编写方式
class My_Process(Process):
def __init__(self,name):
super().__init__()
self.name = name
def run(self):
print('========')
if __name__ == '__main__':
p1 = My_Process('p1')
p1.start()
p2 = My_Process('p2')
p2.start()
多并发socket编程
import socket
from multiprocessing import Process
def my_socket(conn):
conn.send('你好'.encode('utf-8'))
ret = conn.recv(1024).decode('utf-8')
print(ret)
conn.close()


if __name__ == '__main__':
sk = socket.socket()
sk.bind(('127.0.0.1', 8989))
sk.listen()
try:
while True:
conn, addr = sk.accept()
p = Process(target=my_socket,args=(conn,))
p.start()
print(p.name)
finally:
sk.close()




原文地址:https://www.cnblogs.com/bozhengheng/p/10293513.html