Python学习之路,点击有全套Python笔记
进程是什么
进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所有进程间数据不共享,开销大。
进程的几种状态
就绪态:等待调度
执行态:CPU正在执行其功能
等待态:等待某些条件满足
进程的创建
进程的创建-multiprocessing
multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情
import time
import multiprocessing
def test1():
while True:
print("1-------")
time.sleep(1)
def test2():
while True:
print("2-------")
time.sleep(1)
def main():
t1 = multiprocessing.Process(target=test1)
t2 = multiprocessing.Process(target=test2)
t1.start()
t2.start()
if __name__ == '__main__':
main()
进程之间不共享全局变量
进程与线程的对比
功能:
- 进程:能够完成多任务,比如一台电脑上同时运行多个QQ
- 线程:能够完成多任务,比如一个QQ中多个聊天窗口
定义的不同
- 进程是系统进行资源分配和调度的一个独立单位.
- 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
区别:
- 一个程序至少有一个进程,一个进程至少有一个线程.
- 线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高。
- 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
- 线线程不能够独立执行,必须依存在进程中
优缺点:
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。
进程之间通信-Queue
在初始化Queue()对象时(例如q=Queue(),若在括号中没有指定最大可接受的消息数量,获数量为负值时,那么就代表可接受的消息数量没有上限一直到内存尽头)
Queue.qsize():返回当前队列包含的消息数量
Queue.empty():如果队列为空,返回True,反之False
Queue.full():如果队列满了,返回True,反之False
Queue.get([block[,timeout]]):获取队列中的一条消息,然后将其从队列中移除,
import multiprocessing
def download_from_web(q):
# 模拟从网上下载的数据
data = [11, 22, 33, 44]
# 向队列中写入数据
for temp in data:
q.put(temp)
print("----下载器已经下载完了数据并且存入到队列中----")
def analysis_data(q):
# 数据处理
# 从队列中获取数据
watting = list()
while True:
data = q.get()
watting.append(data)
if q.empty():
break
# 模拟处理数据
print(watting)
def main():
# 1、创建一个队列
q = multiprocessing.Queue()
# 2、创建多个进程,将队列的引用当作实参传递到里面
p1 = multiprocessing.Process(target=download_from_web, args=(q,))
p2 = multiprocessing.Process(target=analysis_data,args=(q,))
p1.start()
p2.start()
if __name__ == '__main__':
main()
进程池Pool