参考:https://www.cnblogs.com/cindy-cindy/p/8031731.html
python进程管理的模块:subprocess,multiprocessing
subprocess:运行外部的程序,而不是运行python内部编写的函数。进程之间通过管道进行交流。
1.开启一个进程
popen1=subprocess.Popen('tail -f events.log’, bufsize=10000, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
#popen1是读取events.log的进程,如果希望通过进程的stdin,与其交换数据,在创建Popen对象时,参数stdin必须设置为PIPE; #stdout/stderr同理
#PIPE为管道,如果使用了管道,需要处理管道的输出。
line = popen1.stdout.readline().strip() #清理输出,避免死锁
multiprocessing模块的使用
frome multiprocessing import Queue,Process,Pool
Process类
1.创建子进程
p1 = multiprocessing.Process(target = listen, args = (rdevice,))
p2 = multiprocessing.Process(target = getcpuinfo, args = (rdevice,))
2.启动子进程
p1.start()
p2.start()
3.使得子进程结束之后再执行父进程
p1.join()
p2.join()
Queue类:多个子进程之间的通信,比如,一个子进程向队列写数据,另一个进程从队列中取数据
q = multiprocessing.Queue()
Pool类:如果需要多个子进程可以考虑进程池来管理pool。Pool创建子进程的数量取决与电脑的cpu的数量
p=Pool()
for i in range(3):
p.apply_async(task,args=(i,))
p.close()
p.join()
锁:不同的程序同时对同一个队列操作的时候,为了避免错误,可以在某个函数操作队列的时候给它加锁,这样在同一个时间内只有一个进程对队列进行操作