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学习笔记(十五)的主要内容,如果未能解决你的问题,请参考以下文章