3.9 学网络编程 进程

1.进程

#多线程实现不了真正的多线程
#多进程 第一种方法
from multiprocessing import Process

def f(name):
    time.sleep(1)
    print('yanga11ang',name)

if __name__ == '__main__'
    ps=[]
    for i in range(3):
        p=Process(target=f,args=('iadf',))
        ps.append(p)
        p.start()
    for p in ps:
        p.join()

#多进程 第二种方法
from multiprocessing import Process
class MyProcess(Process):
    def run(self):
        time.sleep(1)
        print('yanga11ang',self.name) #默认是他的一个进程编号

if __name__ == '__main__'
    ps=[]
    for i in range(3):
        p=MyProcess()
        ps.append(p)
        p.start()
    for p in ps:
        p.join()

#进程关系
from multiprocessing import Process
import os,time
def info(title):
    print(title)
    print('module name',__name__)
    print('parent process:',os.getppid()) #打印父进程编号
    print('process id:',os.getpid()) #进程编号
if __name__ == '__main__'
    info('\033[32;1mmain process line\033[0m')
    time.sleep(3)
    p=Process(target=info,args=('bob',))
    p.start()
    p.join()
#一些方法
#name 进程名字
#is_alive() 返回进程是否在运行
#join(timeout) :阻塞当前上下文,知道调用此方法的进程终止或到达指定的timeout(可选参数)
#start() 进程准备就绪,等待cpu调用
#run() start调用run方法 如果实例进程没有传入定制的target
#terminate() 不管任务是否完成立即停止工作进程 

2.进程的通信

#使用进程队列queue
from multiprocessing import process,Queue
def f(q):
    q.put([1,2,'yanga1ang'])
    print('subprocess id:',id(q)) #多个queue地址不同

if __name__=='__main__':
    q=Queue()
    print(id(q))
    ps=[]
    for i in range(3):
        p=Process(target=f,args=(q,))
        ps.append(p)
        p.start()
    print(q.get())
    print(q.get())
    print(q.get())
#queue 之间有莫名的一种联系,queue在某个进程里面改变,其他进程里面也会改变
#queue 是multiprocess里面自己写的队列而不是普通的

#使用进程管道 Pipe
from multiprocessing import process,Pipe
def f(conn):
    conn.send([43,None,'yang11ang'])
    conn.close()

if __name__=='__main__':
    q=Queue()
    parent_conn,child_conn=Pipe()
    p=Process(target=f,args=(child_conn,))
    p.start()
    print(parent_conn.recv())
    p.join()

3 .数据共享 进程的manager

#可以共用市局
from multiprocessing import Process Manager
def f(d,l,n):
    d[n]='1'
    d['2']=2
    l.append(n)
    print(1)
if __name__=='__main__':
    with Manager() as manager: # manage=Manager()
        d=manager.dict() #创建的可以共享的字典
        l=manager.list(rang[5])
        ps=[]
        for i in range(10):
            p=Process(target=f,args=(d,l,i))
            ps.append(p)
            p.start()
        for i in range(10):
            p.join()    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值