线程与进程 | GIL | Python

# 进程:系统进行资源调度的基本单元;
# 一个程序在一个数据集上一次动态执行过程;
# 进程:程序,数据集,进程控制块;
# 1.程序:描述进程功能的完成;
# 2.数据集:程序在执行过程中需要使用的资源;
# 3.进程控制块:描述进程执行的变化过程,用来系统控制管理进程;

# 线程:CPU调度的基本单元;轻量级的进程;
# 作用:减少程序并发执行的开销,提高性能;
# 线程没自由自己的系统资源;

# join() # 子线程未执行结束,主线程就一直处于阻塞状态;
# setDaemon(True) # 主线程退出,子线程也跟着结束;
#     必须在start()之前设置;

# 1.Thread类直接创建线程:
    import threading 

    def work(num):
        print("threading---{}".format(num))

    if __name__ == ‘__main__‘:
        # 创建线程
        t1 = threading.Thread(target=work, args=(5,))
        # 开启线程
        t1.start()
        # 返回当前线程
        print(threading.currentThread())
        # 返回正在运行的线程列表
        print(threading.enumerate())
        # 返回正在运行的线程数量
        print(threading.activeCount())
        print(len(threading.enumerate()))

# 2.Thread类继承式创建
    import threading

    class Work(threading.Thread):
        def __init__(self, num):
            threading.Thread.__init__(self)
            self.num = num

        def run(self):
            print(‘执行线程---{}‘.format(self.num))

    t1 = Work(100)
    # 返回线程是否活动
    print(t1.isAlive())
    # 设置线程名
    t1.setName(‘我是小线程‘)
    # 返回线程名
    print(t1.getName())
    t1.start()

# GIL|全局解释器锁
# 实现不同线程资源共享的互斥;
# 计算密集型效率低,I/O密集型效率还是显著的;

# 解决方案:引入多进程
    from multiprocessing import Process

    def work():
        print(‘multiprocessing---1‘)

    if __name__ == "__main__":
        # 创建进程
        w1 = multiprocessing.Process(target=work)
        # 启动进程
        t.start()
# 每个进程都拥有一个GIL,进程间不共享资源;

# 互斥锁
    import threading

    lock = threading.Lock()
    lock.acpuire()
    ...
    lock.release()
    # 或者with lock

# 死锁:进程,线程在执行过程中因为资源争夺而导致相互等待的现象;

# 进程间通信

# 进程池
    from multiprocessing import Pool

    def work(num):
        print(num)

    if __name__ == "__main__";
        # 实例化进程池对象
        p = Pool(5)
        for i in range(30);
            # 执行任务
            p.apply_async(func=work, args=(2,))
            # 等待子进程完毕后关闭进程池
            p.close()
            # 立即关闭进程池
            p.terminate()
            p.join() # 主进程等待所有子进程执行完毕,必须在close()与terminate()后;
时间: 2024-10-13 13:06:11

线程与进程 | GIL | Python的相关文章

Python 线程(threading) 进程(multiprocessing)

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD

python中线程和进程相关

1.操作系统/应用程序 a : 硬盘 , CPU , 主板 , 显卡 , 内存 , 电源 ... b.装系统 (软件) 系统就是一个由程序员写出来的软件 , 该软件用于控制计算机的硬件 , 让他们之间相互进行配合. c.安软件 (安装应用程序) QQ 百度云 pycharm .... 2.操作中的"并发"   ('并行') 并发 , 伪 , 由于执行速度特别快 , 人感觉不到停顿. 并行 , 真 , 创建10个人同时操作. 3.其他语言线程 , 进程 a. 单进程 , 单线程的应用程序

Python之路-python(paramiko,进程和线程的区别,GIL全局解释器锁,线程,进程)

一.paramiko 二.进程.与线程区别 三.python GIL全局解释器锁 四.线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 一.paramiko 用于远程连接并执行简单的命令 使用用户名密码连接: 1 import paramiko 2 3 # 创建SSH对象 4 ssh = paramiko.SSHClient() 5 # 允许连接不在know_hosts文件中的主机 6 ssh.set

python 学习总结1 线程与进程

第一次写博客 进程的定义: 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次执行活动,属于动态概念. 在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行.这是这样的设计,大大提高了CPU的利用率.进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的 有了进程为什么还要线程? 进程有很多优

Python之路44-进程与线程区别和GIL全局解释器锁

进程 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就成为进程,程序和进程的区别,程序是指令的集合,它是进程运行的静态描述文本,进程是程序的一次执行活动,属于动态概念 有了进程为什么还要有线程? 进程只能同一时间干一件事 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖此输入的数据,也将无法执行 线程 线城是操作系统能够进行运算调度的最小单位,它包含在进程中,是进程的实际运行单位 进程和线程的区别 线程共享创建它的进程的

python学习笔记12 ----线程、进程

进程和线程的概念 进程和线程是操作系统中两个很重要的概念,对于一般的程序,可能有若干个进程,每一个进程有若干个同时执行的线程.进程是资源管理的最小单位,线程是程序执行的最小单位(线程可共享同一进程里的所有资源,进程之间则是独立的). 进程(progress) 直观的说,进程就是正在执行的程序(python中每一个.py文件都可以看作是一个进程),是多任务操作系统中的基本单元,是包含了程序指令和相关资源的集合. 操作系统隔绝了每个进程可以访问的地址空间,如果进程间想要传递信息,可使用进程间通信或者

python线程、进程和协程

链接:http://www.jb51.net/article/88825.htm 引言 解释器环境:python3.5.1 我们都知道python网络编程的两大必学模块socket和socketserver,其中的socketserver是一个支持IO多路复用和多线程.多进程的模块.一般我们在socketserver服务端代码中都会写这么一句: server = socketserver.ThreadingTCPServer(settings.IP_PORT, MyServer) Threadi

python 线程,进程与协程

引言 线程 创建普通多线程 线程锁 互斥锁 信号量 事件 条件锁 定时器 全局解释器锁 队列 Queue:先进先出队列 LifoQueue:后进先出队列 PriorityQueue:优先级队列 deque:双向队列 引言 在学习过socket和socketserver后,我们了解到socketserver可以支持IO多路复用.在定义socketserver服务端的时候一般会使用: server = socketserver.ThreadingTCPServer(settings.IP_PORT,

Python菜鸟之路:Python基础-线程、进程、协程

上节内容,简单的介绍了线程和进程,并且介绍了Python中的GIL机制.本节详细介绍线程.进程以及协程的概念及实现. 线程 基本使用 方法1: 创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入 import threading import time def worker(): time.sleep(2) print("test") for i in range(5): t = threading.Thread(target=