python进程管理模块

参考: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()

锁:不同的程序同时对同一个队列操作的时候,为了避免错误,可以在某个函数操作队列的时候给它加锁,这样在同一个时间内只有一个进程对队列进行操作

猜你喜欢

转载自blog.csdn.net/luckgrilwyy/article/details/83512080