Python—进程与线程
多进程和多线程
whyfail
编程界崇尚以简洁优雅为美,很多时候,如果你觉得一个概念很复杂,那么很可能是你理解错了!
展开
-
Python之线程同步和异步
同步调用:确定调用的顺序异步调用:不确定顺序堵塞和非堵塞# 线程同步,多个线程按照顺序执行import threadingimport timeclass Test01(threading.Thread): def run(self): while True: if max01.acquire(): ...原创 2019-11-28 16:24:38 · 596 阅读 · 0 评论 -
Python之死锁
线程同步(死锁)死锁(错误情况,理解即可)在线程间共享多个资源的时候, 如果两个线程分别占有⼀部分资源并且同时等待对⽅的资源, 就会造成死锁 。⼊到了死锁状态, 可以使⽤ctrl-z退出 。import threading, timedef run01(): if maxA.acquire(): print('111') time.sleep(1...原创 2019-11-28 16:00:25 · 241 阅读 · 0 评论 -
Python之互斥锁
当多个线程⼏乎同时修改某⼀个共享数据的时候, 需要进⾏同步控制 。线程同步能够保证多个线程安全访问竞争资源, 最简单的同步机制是引⼊互斥锁 ‘互斥锁互斥锁保证了每次只有⼀个线程进⾏写⼊操作,从⽽保证了多线程情况下数据的正确性(原子性)。互斥锁为资源引入一个状态:锁定/非锁定。某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态...原创 2019-11-28 15:45:14 · 212 阅读 · 0 评论 -
Python之线程共享全局变量
在⼀个进程内的所有线程共享全局变量, 多线程之间的数据共享(这点要⽐多进程要好)缺点就是, 可能造成多个线程同时修改一个变量(即线程⾮安全),可能造成混乱。# 线程共享全局变量测试import threading, timenum = 100def run01(): global num for i in range(3): num += 1 ...原创 2019-11-28 15:36:04 · 364 阅读 · 0 评论 -
Python之线程的五种状态
多线程程序的执⾏顺序是不确定的(操作系统决定)。当执⾏到sleep语句时, 线程将被阻塞(Blocked) ,到sleep结束后, 线程进⼊就绪(Runnable) 状态, 等待调度。⽽线程调度将⾃⾏选择⼀个线程执⾏。代码中只能保证每个线程都运⾏完整个run函数,但是线程的启动顺序、run函数中每次循环的执⾏顺序都不能确定 。1、新状态:线程对象已经创建,还没有在其上调用start(...原创 2019-11-28 15:22:15 · 2176 阅读 · 0 评论 -
Python之多线程
线程:实现多任务的另一种方式一个进程中,也经常需要同时做多件事,就需要同时运行多个‘子任务’,这些子任务,就是线程线程又被称为轻量级进程(lightweight process),是更小的执行单元一个进程可拥有多个并行的(concurrent)线程,当中每一个线程,共享当前进程的资源一个进程中的线程共享相同的内存单元/内存地址空间可以访问相同的变量和对象,而且它们从同一堆中分配对象通信、...原创 2019-11-25 21:15:23 · 107 阅读 · 0 评论 -
Python之进程池通信
进程池创建的进程之间通信:如果要使⽤Pool创建进程, 就需要使⽤multiprocessing.Manager()中的Queue()⽽不是multiprocessing.Queue()否则会得到⼀条如下的错误信息:RuntimeError: Queue objects should only be shared between processesthrough inheritance....原创 2019-11-25 20:09:16 · 265 阅读 · 0 评论 -
Python之多进程间通信
多进程之间,默认是不共享数据通过Queue(队列Q)可以实现进程间的数据传递Q本身是一个消息队列from multiprocessing import Queueq = Queue(3)q.put('消息01')q.put('消息02')q.put('消息03')print(q.full())》》》Ture可以使⽤multiprocessing模块的Queue实现多进...原创 2019-11-25 20:02:08 · 206 阅读 · 1 评论 -
Python之创建多进程方式
创建新的进程还能够使⽤类的⽅式, 可以⾃定义⼀个类, 继承Process类每次实例化这个类的时候, 就等同于实例化⼀个进程对象import multiprocessingimport timeclass classProcess(multiprocessing.Process): def run(self): n = 5 while n >...原创 2019-11-24 20:34:47 · 430 阅读 · 0 评论 -
python之多进程数据独立
全局变量在多个进程中不共享进程之间的数据是独立的,默认情况下互不影响from multiprocessing import Processnum = 3def run01(): global num num += 5 print('01子进程运行中,num值为:%d' % num)def run02(): global num num +...原创 2019-11-24 20:26:29 · 443 阅读 · 1 评论 -
Python之Process类
Process(target , name , args)参数介绍—target表示调用对象,即子进程要执行的任务—args表示调用对象的位置参数元组,args=(1,)—name为子进程的名称Process类常⽤⽅法p.start():启动进程,并调用该子进程中的p.run()p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方...原创 2019-11-24 20:16:24 · 511 阅读 · 0 评论 -
Python之__name__说明
if name == “main”:说明:一个python的文件有两种使用的方法,第一是直接作为程序执行,第二是import到其他的python程序中被调用(模块重用)执行。因此if name == ‘main’: 的作用就是控制这两种情况执行代码的过程,name 是内置变量,用于表示当前模块的名字在if name == ‘main’: 下的代码只有在文件作为程序直接执行才会被执行,而imp...原创 2019-11-24 20:09:21 · 298 阅读 · 0 评论 -
Python之进程
程序:是一个指令的集合进程:正在执行的程序或者说:当运行一个程序,就启动了一个进程编写完的代码,没有运行时,称为程序正在运行的代码,称为进程程序是死的(静态的),进程是活的(动态的)操作系统轮流让各个任务交替执⾏由于CPU的执⾏速度实在是太快了, 就感觉就像所有任务都在同时执⾏⼀样多进程中, 每个进程中所有数据(包括全局变量) 都各有拥有⼀份, 互不影响程序开始运行时,首先会创建...原创 2019-11-24 00:16:59 · 91 阅读 · 0 评论