进程线程day1

程序:就是一段代码,么有执行

进程:以进程为单位来分配系统资源的最小单位,也就是把一段程序执行起来,操作系统会分配一个内存空间,

  里面有代码,有变量,还有程序执行到哪里的计数器等,这就是进程

单核cpu:如何同时运行qq,微信,酷狗,等多任务?

    这是运用的分时复用的原理,有一个时间片的概念,他是微秒级的,1000微秒=1毫秒,1000毫秒=1秒,

    也就是在一定的时间之内cpu通过时间片来回的切转,让我们人眼看起来就是同时在运行。

1.继承模块中的Process类

from multiprocessing import Process
import os

def run(num):
  print os.getpid(),os.getppid()
  print num

创建一个子进程对象
process = Process(target=run, args=(100,), kwargs={})

process.start()
process.join()

2、通过继承Process类来创建进程类,可以重新写一些方法,可以初始化一些参数,以便使用

from multiprocessing import Process

from os import getpid

class SubProcess(Process):
  def __init__(self, num):
    super(SubProcess, self).__init__()  
    self.num = num

  def run(self):
    print ‘zijincheng‘, getpid()
    self.work()

    self.fun()

  def work(self):
    print ‘haha‘

  def fun():

    pass

process_object = SubProcess(100)

process_object.start()   #会自动开启run方法
process_object.join()

3、 执行过程

import os
import time

from multiprocessing import Process

def sub_process_fun(num, a):

  print os.getpid(),os.getppid()

  # process_obj = Process(target=sub_process_fun, args=(100,), kwargs={"a": 10}, name="itcast")
process_obj = Process(target=sub_process_fun, args=(100,), kwargs={"a": 10})

process_obj.start()

print process_obj.name
print process_obj.pid      查看子进程pid
print process_obj.is_alive()

process_obj.join()         回收子进程,默认是阻塞的

process_obj.terminate()    停止了子进程,只是停止代码,但是没有进行资源回收,所以下一行is_alive 返回值是true
print("父进程:子进程的状态 %s" % process_obj.is_alive())
print("父进程: 回收子进程的资源")



4、什么是进程池呢?

  当一个主进程执行过程中需要创建子进程来完成多个任务时候,那么如果运用fork来进行创建然后再回收,

    在创建在回收,降低主进程性能。所以事先创建进程池。

  当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,

    手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法

from multiprocessing import Pool
import os

def work():
  print os.getpid()
  print os.getppid()

po = Pool(3)
for i in range(3):
  po.apply_async(work,())    后面一个参数是元组形式,(i,)

#非阻塞方式,就是当执行到这里,主进程for循环执行完了以后
# 不管子进程是否执行,那么还会继续执行下面的代码
#apply()阻塞方式

#关闭进程池,但资源并没有释放
po.close()
# 回收进程池资源 主进程阻塞
po.join()

时间: 2024-08-02 01:07:08

进程线程day1的相关文章

Linux下进程线程,Nignx与php-fpm的进程线程方式

1.进程与线程区别 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源. "进程——资源分配的最小单位,线程——程序执行的最小单位" 进程有独立的地

android 进程/线程管理(四)续----消息机制的思考(自定义消息机制)

继续分析handler 和looper 先看看handler的 public void dispatchMessage(Message msg) { if (msg.callback != null) { handleCallback(msg); } else { if (mCallback != null) { if (mCallback.handleMessage(msg)) { return; } } handleMessage(msg); } } 所以消息的处理分层三种,就是 1.传入一

进程/线程介绍

一.进程 进程可以认为是程序执行时的一个实例.进程是系统进行资源分配的独立的实体,且每个进程拥有独立 的地址空间.一个进程无法直接访问另一个进程的变量和数据结构,如果希望让一个进程访问另一个进程 的资源,需要使用进程间通信,比如:管道,有名管道,信号,信号量,消息队列,套接字等. 一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间.线程和进程的一个主要区别是,同一程序内 的多个线程会共享部分状态,多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存).同时 每个线程还拥有自己的寄

进程线程协程那些事儿

一.进程与线程 1.进程 我们电脑的应用程序,都是进程,假设我们用的电脑是单核的,cpu同时只能执行一个进程.当程序出于I/O阻塞的时候,CPU如果和程序一起等待,那就太浪费了,cpu会去执行其他的程序,此时就涉及到切换,切换前要保存上一个程序运行的状态,才能恢复,所以就需要有个东西来记录这个东西,就可以引出进程的概念了. 进程就是一个程序在一个数据集上的一次动态执行过程.进程由程序,数据集,进程控制块三部分组成.程序用来描述进程哪些功能以及如何完成:数据集是程序执行过程中所使用的资源:进程控制

9 异常处理 操作系统 进程线程 队列+生产消费者模型 进程同步 回调函数

异常处理 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 异常的种类: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportError 无法引入模块或包:基本上是路径问题或名称错误 IndentationError 语法错误(的子类) :代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访

操作系统:进程/线程同步的方式和机制,进程间通信

一.进程/线程间同步机制. 临界区.互斥区.事件.信号量四种方式临界区(Critical Section).互斥量(Mutex).信号量(Semaphore).事件(Event)的区别1.临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问.在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占.2.互斥量:采用互斥对象机

进程/线程

进程/线程控制: 创建                  退出                      等待 多进程               fork()         exit()           wait() 多线程      pthread_create    pthread_exit()        pthread_join() 线程的同步与互斥: 线程的互斥:  互斥锁 初始化互斥锁 int pthread_mutex_init(pthread_mutex_t *mute

java 进程/线程

进程 OS并发的一个任务 CPU分时间片交替执行 宏观并行 微观串行 线程:在一个进程中并发的一个顺序执行流程 线程的组成: 1.数据 堆空间共享 栈空间独立 2.CPU 3.代码 Thread 线程对象 继承Thread类型 覆盖run方法 直接创建Thread对象 实现Runnable接口 实现run方法 先创建Runnable对象,再创建Thread对象 多线程共同访问同一个对象(临界资源),如果破坏了不可分割的操作(原子操作),就会发生数据不一致的情况 synchronized 同步 s

python基础-------进程线程(二)

Python中的进程线程(二) 一.python中的"锁" 1.GIL锁(全局解释锁) 含义: Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(Global Interpreter Lock)来互斥线程对Python虚拟机的使用.为了支持多线程机制,一个基本的要求就是需要实现不同线程对共享资源访问的互斥,所以引入了GIL.GIL:在一个线程拥有了解释器的访问权之后,其他的所有线程都必须等待它释放解释器的访问权,即使这些线程的下一条指令并不会互相影响.在