美文网首页
python 中的进程和线程

python 中的进程和线程

作者: py纪念 | 来源:发表于2018-12-02 15:43 被阅读0次

    1. 进程和线程的区别:

    • 进程是操作系统的基本单位,而线程是任务调度和执行的基本单位
    • 每个进程都有独立的代码和数据空间
    • 同一类线程共享代码和数据空间
      在操作系统中能同时运行多个进程(程序):而在同一个进程中有多个线程同时执行
    • 进程可以分配内存空间,而线程除了CPU外系统不好为线程分配内存(线程所使用的资源来自于所属进程的资源)
    • 线程组之间能共享资源
    • 线程执行开销小,但不利于资源的管理和保护而进程正好相反
    • 没有运行的代码称为程序
    • 正在运行的代码称为进程
    • 进程除了包含代码外还包含代码的运行环境

    2.fork() 在Linux下使用

    • os模块下的操作

    • python程序可以轻松的创建子进程(Linux下)

    • import os : 引入模块

    • os.fork() : 执行一次返回两次,操作系统把自己当做当前进程,然后在父进程和子进程内分别执行

    • 子进程返回0,父进程返回子进程的ID

    • gitpid , gitppid os模块下的

    • 得到自己的进程id,得到父进程的进程id

    3.multiprocessing 在Windows下使用编写多进程

    • from multiprocessing import Process

    • import os

    • p = Process(target=fun)启动子进程

    • target: 表示进程实例所调用的对象

    • args: 表示调用对象的位置参数元组

    • kwargs: 表示调用对象的关键字参数字典

    • PROCESS常用方法:

    • p.start() 启动进程实例创建子进程

    • p.join() 等待子进程执行完成后再执行主进程,或等待多少秒

    • p.terminate() 立即终止程序

    • is_alive()判断进程是否还在执行

    • run() 如果对象没有给target参数,则执行对象中的run()方法

    3.1进程池Pool()

    • apply() 阻塞
    • apply_async() 非阻塞
    • . join 阻塞进程 池子中所有子进程执行完成,再执行主进程,必须在close或terminate之后使用
    • .close() 停止外部继续使用池子进程
    • .terminate() 不管任务是否完成立即终止

    3.2Queue() 队列

    • 用来在生产者和消费者线程之间的信息传递
    • 队列默认先进先出
    • put() 往队里里放数据 当队列放满时 默认一直等待
    • put_nowait() 直接放数据,队列满时直接结束不等待
    • get() 从队列开头取
    • get_nowait()

    4. 多线程 threading

    • 一个进程内的线程可以共享全局变量
    • start() 启动多线程
    • threading.Thread(target=) 使用线程
    • threading.enumerate() 获取线程数
    • threading共享全局变量
    • global 使用全局的变量

    4.1互斥锁

    • s = threading.Lock()
    • s.acquire() 默认blocking为True: 加锁,如果加
      锁不成功则阻塞知道加锁成功
    • s.release() 解锁
    • 锁优点:确保了数据代码的完整执行
    • 缺点: 阻止了多线程并发执行,

    相关文章

      网友评论

          本文标题:python 中的进程和线程

          本文链接:https://www.haomeiwen.com/subject/rntyqqtx.html