码迷,mamicode.com
首页 > 编程语言 > 详细

攻克python3-进程

时间:2018-06-28 13:44:38      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:rlock   另一个   内容   sel   阻塞   rgs   controls   with   子进程   

---恢复内容开始---

进程

进程是程序的一段执行过程,是个动态概念,是操作系统调度的最小单位。

multiprocessing类

Process 类用来描述一个进程对象。创建子进程的时候,只需要传入一个执行函数和函数的参数即可完成 Process 示例的创建。

  star() 方法启动进程

  join() 方法实现进程间的同步,等待所有进程退出。

  close() 用来阻止多余的进程涌入进程池 Pool 造成进程阻塞。

multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

  target 是函数名字,需要调用的函数

  args 函数需要的参数,以 tuple 的形式传入

创建子进程

直接调用

from multiprocessing import Process
import time
def f(name):
    time.sleep(2)
    print(hello, name)
 
if __name__ == __main__:
    p = Process(target=f, args=(bob,))
    p.start()
    p.join()

继承式调用

from multiprocessing import Process
import time
class MyProcess(Process):
    def __init__(self,name):
        super().__init__()
        self.name=name
 
    def run(self):
        print(task <%s> is runing % self.name)
        time.sleep(2)
        print(task <%s> is done % self.name)
 
if __name__ == __main__:
    p=MyProcess(egon)
    p.start()
 
    print()

与线程一样run方法必须重写

进程间通信

这里介绍只有具有亲缘关系的进程才能进行通信。

进程queue

线程queue共用内存空间
进程queue不共用内存空间,只是通过传递数据来达到进程间通信的目的

技术分享图片
from multiprocessing import Process,Queue
import threading,queue

def fun(qq):
    qq.put("wurui")

if __name__ == __main__:
    q=Queue()
    # q=queue.Queue()
    p=Process(target=fun , args=(q,))
    p.start()
    print(q.get())
    p.join()
View Code

管道通信pipe

技术分享图片
from multiprocessing import Process,Pipe

def f(conn):
    conn.send("hello!")

if __name__ == __main__:
    p_conn,c_conn=Pipe()
    p=Process(target=f,args=c_conn)
    p.start()
    print(p_conn.recv())
    p.join()
View Code

manager

A manager object returned by Manager() controls a server process which holds Python objects and allows other processes to manipulate them using proxies.

A manager returned by Manager() will support types listdictNamespaceLockRLockSemaphoreBoundedSemaphoreConditionEventBarrierQueueValue and Array. For example:

技术分享图片
from multiprocessing import Process,Manager
import os

def f(d,l):
    d[os.getpid()]=os.getpid()
    l.append(os.getpid())
    print(l)

if __name__ == __main__:
    with Manager() as m:
        d=m.dict()
        l=m.list(range(5))
        p_list=[]
        for i in range(10):
            p=Process(target=f,args=(d,l))
            p.start()
            p_list.append(p)
        for j in p_list:
            j.join()
        print(d)
        print(l)
View Code

lock(屏幕锁:防止一个进程未打印完成,另一个进程插入)

技术分享图片
def f(l,i):
    l.acquire()
    print("hello",i)
    l.release()

if __name__ == __main__:
    l=Lock()

    for i in range(10):
        Process(target=f,args=(l,i)).start()
View Code

进程池

 

---恢复内容结束---

攻克python3-进程

标签:rlock   另一个   内容   sel   阻塞   rgs   controls   with   子进程   

原文地址:https://www.cnblogs.com/kxsph/p/9237983.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!