进程与线程补充 喜欢ヅ旅行 2022-05-16 01:13 153阅读 0赞 1.进程与线程的标识 ### 进程pid ### 顾名思义,pid是进程的身份标志 import multiprocessing import time def func(): time.sleep(2) p = multiprocessing.Process(target=func) print('pid before start:',p.pid) #start之前无pid p.start() print('pid after start:',p.pid) #start之后才分配pid pid before start: None pid after start: 1857 ### 线程ident ### 同进程的pid import time import threading def func(): time.sleep(2) t = threading.Thread(target=func) print('ident before start:',t.ident) #start之前无ident t.start() print('ident after start:',t.ident) #start之后才分配ident ident before start: None ident after start: -1223161024 ### 进程名与线程名 ### 进程与线程都存在name属性 import multiprocessing import time import threading p = multiprocessing.Process(name='sakura') print(p) print(p.name) print('-'*20) p.name='小樱花' #可通过name属性来设置进程名 print(p) <Process(sakura, initial)> #未start前状态为initial sakura -------------------- <Process(小樱花, initial)> ### 当前线程与当前进程 ### multiprocessing.current\_process() 显示当前进程对象 import multiprocessing import time def func(): print('-'*10) print(multiprocessing.current_process()) #在子进程中显示当前进程 time.sleep(3) print(multiprocessing.current_process()) #主进程中显示当前进程 print('-'*10) p = multiprocessing.Process(target=func,name='sakura') print(p) p.start() <_MainProcess(MainProcess, started)> ---------- <Process(sakura, initial)> ---------- <Process(sakura, started)> ** 2.进程与线程其余操作** ### 进程终止 ### terminate() import multiprocessing def func(): print('subprocess start') time.sleep(3) # 延时3s print('subprocess end') p = multiprocessing.Process(target=func) p.start() time.sleep(2) p.terminate() #p进程启动2s后终止进程 subprocess start **注:线程不能被终止,只能等待其运行结束。** ### 等待进程或线程结束 ### join() 阻塞 import multiprocessing import time import datetime def func(): time.sleep(2) # 延时2s print('main process start') print(datetime.datetime.now()) p = multiprocessing.Process(target=func) p.start() p.join() #阻塞住主进程的运行,等待子进程运行完再继续 time.sleep(2) print(datetime.datetime.now()) print('main process end') main process start 2018-08-13 23:08:19.247949 2018-08-13 23:08:23.289233 main process end 线程与进程使用方法相同。 ### 进程与线程的生存状态 ### is\_alive() import multiprocessing p = multiprocessing.Process(name='sakura') print(p) print(p.is_alive()) p.start() print(p) print(p.is_alive()) <Process(sakura, initial)> #未启动之前为initial False <Process(sakura, started)> #启动之后是started True 线程与进程使用方法相同。 **3.守护进程** 守护进程含义:主进程结束时首先会回收僵尸进程(进程运行结束但仍占有资源未释放的进程),然后杀死所有子进程。 如关闭浏览器时,会关闭所有的标签页。 方法:参数列表中设置 daemon=True 也可通过属性:进程名.daemon=True import multiprocessing import time def func(): print('sub-process start') time.sleep(5) print('sub-process end:') p = multiprocessing.Process(target=func,name='sakura',daemon=True) #设置守护进程 #或者p.daemon=True设置守护进程 p.start() time.sleep(2) sub-process start #主进程在2s结束时杀死守护进程,所以没有end **4.以面向对象的形式使用线程与进程** * 继承 Process或Thread 类 * 重写\_\_init\_\_方法 * 重写run方法 import multiprocessing class Myprocess(multiprocessing.Process): def __init__(self,*args,**kwargs): super().__init__() self.args = args self.kwargs = kwargs def run(self): print(multiprocessing.current_process()) print(self.args) print(self.kwargs) print(multiprocessing.current_process()) print('-'*10) p = Myprocess(1,2,3,a=1,b=2,c=3) p.start() <_MainProcess(MainProcess, started)> ---------- <Myprocess(Myprocess-1, started)> (1, 2, 3) {'a': 1, 'c': 3, 'b': 2} ### 用面向对象方式来实现多线程并发服务器 ### import threading import socket import multiprocessing server = socket.socket() server.bind(('0.0.0.0', 8081)) server.listen(10) class MyThread(multiprocessing.Process): def __init__(self, conn): super().__init__() self.conn = conn def run(self): while True: data = self.conn.recv(1024) if data: print('收到的消息', data.decode()) self.conn.send(data) else: print('用户退出', addr) self.conn.close() break while True: conn, = server.accept() thraed = MyThread(conn) thraed.start() import socket client = socket.socket() client.connect(('127.0.0.1',8800)) while True: data = input('please write the message:') client.send(data.encode()) print(client.recv(1024).decode()) if data == 'Q' or data == 'q': break client.close()
相关 进程与线程 有那么一些零碎的小知识点,偶尔很迷惑,偶尔被忽略,偶然却发现它们很重要,也是各大笔试和面试高频出现考点。这段时间正好在温习这些,就整理在这里,一起学习一起提高!后面还会继续补充 痛定思痛。/ 2022年05月30日 00:19/ 0 赞/ 283 阅读
相关 进程与线程简单理解,待补充。 为了提高CPU的利用率,计算机采用多道程序工作方式,使得CPU始终在执行某个任务。为了提高交互和某些任务的优先级,采用分时作业。即进行不同任务之间动态的调度。 通俗的讲,进程就 痛定思痛。/ 2022年05月29日 08:46/ 0 赞/ 175 阅读
相关 进程与线程补充 1.进程与线程的标识 进程pid 顾名思义,pid是进程的身份标志 import multiprocessing import time 喜欢ヅ旅行/ 2022年05月16日 01:13/ 0 赞/ 154 阅读
相关 进程与线程 [进程与线程][Link 1] 推荐一篇讲解的非常透彻且非常形象的文章,阮一峰的一篇博文。 原文链接:[进程与线程的一个简单解释][Link 2] posted @ 秒速五厘米/ 2022年03月22日 11:09/ 0 赞/ 281 阅读
相关 线程与进程 进程 1. 进程是资源分配的最小单位。 2. 开销: 有独立的代码和数据空间,程序切换开销大。 3. 坏境: 能同时运行多个进程(程序)。 4. 内存: 系统在运 骑猪看日落/ 2022年03月17日 10:14/ 0 赞/ 246 阅读
相关 进程与线程 进程,是一个活动的实体,我们平时所说的程序或者可执行文件并不是一个进程,他们都属于被动实体,只有将程序或者可执行文件调入到内存中才能成为一个活动实体,才能称之为进程。 进程是 小鱼儿/ 2022年01月16日 04:27/ 0 赞/ 291 阅读
相关 进程与线程 进程的定义 由于程序在并发执行时,各次执行的结果不同,所以用“程序”这个概念已无法描述程序的并发执行,所以必须引入新的概念 – 进程来描述程序的并发执行。 根据1978 比眉伴天荒/ 2022年01月15日 01:05/ 0 赞/ 303 阅读
相关 进程与线程 进程至少包含三个组成要素:程序快、代码块以及进程控制块; 进程是系统中资源分配和保护的基本单位; 线程作为CPU的调度和分派的基本单位; 每个进程在创建的时候,至少 Dear 丶/ 2022年01月11日 07:49/ 0 赞/ 325 阅读
相关 进程与线程 进程与线程: 基本概念: 进程:进程是正在运行的程序的实例。每个进程都有自己的地址空间,一般情况下,它包括文本区域、数据区域和堆栈。文本区域存储处理器执行的代码;数据区 落日映苍穹つ/ 2021年09月26日 13:08/ 0 赞/ 400 阅读
相关 进程与线程 进程与线程 1 进程 1.1 进程的概念 进程就是正在运行的程序,它代表了程序所占用的内存区域 1.2 进程的特点 独立性 进程是系 忘是亡心i/ 2021年09月07日 06:19/ 0 赞/ 610 阅读
还没有评论,来说两句吧...