多进程适合计算密集型的情形
多线程适合IO密集型的场景
单一进程
使用睡眠来模拟耗时操作,查看真个程序的运行时间
import time
def new_time():
#格式化时间,获取当前准确时间
return time.asctime(time.localtime(time.time()))
def fun():
print('inner-start',new_time())
time.sleep(5) #休眠5秒钟,模拟耗时操作
print('inner-end',new_time())
print('outer-start',new_time())
fun()
time.sleep(5)
print('outer-end',new_time())
多进程
使用多进程来分担耗时任务,在另一个进程中运行耗时任务。这样主进程就不会收到影响。
当子进程执行完时,返回子进程的运行结果
import time
import threading #多进程模块
def new_time():
#格式化时间,获取当前准确时间
return time.asctime(time.localtime(time.time()))
def fun(x):
print(x)
print('inner-start',new_time())
time.sleep(5) #休眠5秒钟,模拟耗时操作
print('inner-end',new_time())
print('outer-start',new_time())
t = threading.Thread(target=fun,args=(111,)) #实例化一个线程对象
t.start()
time.sleep(5)
print('outer-end',new_time())
多线程
import time,multiprocessing
def new_time():
#格式化时间,获取当前准确时间
return time.asctime(time.localtime(time.time()))
def fun():
print('inner-start',new_time())
time.sleep(5) #休眠5秒钟,模拟耗时操作
print('inner-end',new_time())
def fun1():
print('inner-start',new_time())
time.sleep(5) #休眠5秒钟,模拟耗时操作
print('inner-end',new_time())
def fun2():
print('inner-start',new_time())
time.sleep(5) #休眠5秒钟,模拟耗时操作
print('inner-end',new_time())
print('outer-start',new_time())
p = multiprocessing.Process(target=fun)
p.start() #开启进程-子进程
p1 = multiprocessing.Process(target=fun1)
p1.start() #开启进程-子进程
p2 = multiprocessing.Process(target=fun2)
p2.start() #开启进程-子进程
time.sleep(5)
print('outer-end',new_time())
多进程实现并发服务器
import socket
import multiprocessing
server = socket.socket()
server.bind(('127.0.0.1', 5959))
server.listen(100)
def handel(conn):
'''处理数据'''
while True:
recv_data = server.recv(1024)
if recv_data:
print(recv_data)
conn.send(recv_data)
else:
conn.close()
break
while True:
conn, addr = server.accept()
process = multiprocessing.Process(target=handel, args=(conn,))
process.start()