Python学习笔记(十五)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习笔记(十五)相关的知识,希望对你有一定的参考价值。

一、进程与线程

  一个操作系统可以有多个进程
  一个进程可以有多个线程,且必须有一个线程


二、多进程

  from multiprocessing import Process
  import os
  # 多进行要运行的函数
  def run_proc(name):
    print("Hello,",name,os.getpid())
  if __name__ == "__main__":
    print("Parent process %s " % os.getpid())
    p = Process(target=run_proc, args=("test",))
    print("chind process will start...")
    p.start()  #调用进程执行指定的函数
    p.join()   #等待子进程结束后再继续往下执行,通常用于进程间的通信
    print("child process end...")


三、进程池

  当要创建运行大量的子进程的时候,可以使用进程池的方式来批量创建子进程

  from multiprocessing import Pool
  import os
  import time
  import random
  # 定义进程执行的函数
  def fun():
    print("--哈哈--")
    start_time = time.time()
    time.sleep(random.random() * 4)
    end_time = time.time()
    print("花费:%s",(end_time - start_time))
  # 在主线程中执行进程池
  if __name__ = "__main__":
    p = Pool(3)
    # 循环向进程池中添加进程
    p.apply_async(fun,args=())
    # 关闭进程池
    p.close()
    # 返回主进程
    p.join()
    print("end")


四、子进程

  子进程是常常用来使用调用第三方软件或者应用的方式,Python中提供了subprocess来支持和实现子进程

  import subprocess

  subprocess.call()  #父进程等待子进程完成,返回退出信息,也即返回码
  subprocess.check_call() #父进程等待子进程完成,返回0,如非0,则报错
  subprocess.check_out() #父进程等待子进程完成,返回子进程向标准输出的输出结果

  当subprocess.call("ls -l",shell=True) #shell被设置为真,可以直接使用命令"ls -l"而非["ls","-l"]

  可以使用Popen()类获取更加个性化的输出和输出,该类生成的对象代表子进程
  Popen()创建对象后主程序不会等待子进程的完成,但通过调用子进程的.wait()方法可以让主程序等待子进程的完成,该方法会阻塞主进程

  还可以在父进程中对子进程进程如下操作:
  child.poll() #检查子进程状态
  child.kill() #终止子进程
  child.send_signal() #向子进程发送信号
  child.terminate() #终止子进程
  子进程的PID存储在child.PID中

  通过指定子进程的:stdin = subprocess.PIPE,stdout = subprocess.PIPE,stderr = subprocess.PIPE可以在Python中使用子进程的标准输入与标准输出,subprocess为子进程提供了标准输入和标准输出的缓存

  可以通过communicate()方法来给子进程进程输入
  
  


    

 















































以上是关于Python学习笔记(十五)的主要内容,如果未能解决你的问题,请参考以下文章

python学习笔记(十五)-异常处理

python学习笔记-(十五)RabbitMQ队列

Python学习笔记十五:循环对象

Python学习笔记(三十五)struct

Python学习笔记十五_开发接口

Python学习笔记(十五)用Python获取本地数据