-
多任务深入了解
-
多进程实现
-
多线程实现
-
并发服务器
目录
多任务深入了解
1 CPU时间片:
指例如利用电脑边聊天,边玩小游戏,这个操作其实叫做高并发。如何实现的?在一定时间内,通过CPU时间片,不停地进行切换,执行多个任务,CPU每次切换的频率是5 nm ~ 800 nm之间。从肉眼看是同时执行的,其实不是,只不过切换的速度偏快而已。
2 多进程实现
进程定义:正在运行的程序
进程的特点:
1.每个进程拥有自己的独立的地址空间,内存,数据在栈,以及其他用于跟踪执行的辅助数据
2.各个进程之间相互独立,互不影响
进程的作用:提高代码的运行效率
2.1 进程的导入模块:muitiprocessing。
注意在使用muitiprocessing 之前,要使用''__main__方法。
import time
import multiprocessing
def gauzi():
for i in range(5):
print("嗑瓜子中.....")
time.sleep(0.3)
def drink():
for i in range(5):
print("喝水中.....")
time.sleep(0.3)
# Eguazi()
# Drink()
if __name__ == '__main__':
#创建嗑瓜子子进程
guazi_process = multiprocessing.Process(target=gauzi) # Eguazi_process 这个进程要执行的Eguazi方法。
Drink_process = multiprocessing.Process(target=drink) # Drink_process 这个进程要执行的Drink方法。
#启动进程任务
guazi_process.start()
Drink_process.start()
2.2 进程携带参数
以元组方式传参:
携带一个参数时:用arges 里面的数据 后面要加一个 ‘,’
携带多参数时:用arges 传入对应的个数。
import time
import multiprocessing
def func(x):
print(x)
if __name__ == '__main__':
#创建嗑瓜子子进程
guazi_process = multiprocessing.Process(target=func,args=(1,))
#启动进程任务
guazi_process.start()
import time
import multiprocessing
def func(x,y):
print(x+y)
if __name__ == '__main__':
#创建嗑瓜子子进程
guazi_process = multiprocessing.Process(target=func,args=(1,3))
#启动进程任务
guazi_process.start()
以字典的方式传参:
import time
import multiprocessing
def func(x):
print(x)
if __name__ == '__main__':
#创建嗑瓜子子进程
# 以元祖方式传参,元组里面的元素顺序要和函数里面的参数顺序保持一致args=(2,)
# 以字典方式传参,字典里面的key要和函数里面的参数名保持一致,没有顺序要求 kwargs={"x":18}
guazi_process = multiprocessing.Process(target=func,kwargs={'x': 3})
#启动进程任务
guazi_process.start()
也可以元祖和字典同时使用:
import time
import multiprocessing
def func(x,y):
print(x,y)
if __name__ == '__main__':
#创建嗑瓜子子进程
# 以元祖方式传参,元组里面的元素顺序要和函数里面的参数顺序保持一致args=(2,)
# 以字典方式传参,字典里面的key要和函数里面的参数名保持一致,没有顺序要求 kwargs={"x":18}
guazi_process = multiprocessing.Process(target=func,args=(1,),kwargs={'y':2})
#启动进程任务
guazi_process.start()
注意:以元祖的方式传参,元祖里面的元素顺序要跟函数里面的顺序一致
以字典的方式传参,字典里面的key 要和函数里面的函数名保持一致,没有顺序。
多进程:一个进程里面有多个子进程。
3 线程
3.1 线程定义
线程是运行在进程里面的,进程如果说是电子厂,则线程就是厂里面的工人。
进程包括多个线程,进程结束了,线程也自动结束。
3.2 线程的作用
节省空间和内存地址
3.3 线程多线程模块:threading
也可以用元祖和字典分别单个传参,也可以同时传参。
import time
# import multiprocessing
import threading
def func(x,y):
print(x,y)
if __name__ == '__main__':
#创建嗑瓜子子进程
# 以元祖方式传参,元组里面的元素顺序要和函数里面的参数顺序保持一致args=(2,)
# 以字典方式传参,字典里面的key要和函数里面的参数名保持一致,没有顺序要求 kwargs={"x":18}
guazi_process = threading.Thread(target=func,args=(1,),kwargs={'y':2})
#启动进程任务
guazi_process.start()
4 时间模块:
import time
print(time.strftime('%Y-%m-%d %H:%M:%S'))
import time
print(time.strftime('%Y-%m-%d %H:%M:%S'))
感谢大家支持,大家一起继续加油!
时光不负,未来可期