python 多进程

摘要:
1.进程的创建frommultiprocessingimportProcessimporttime,osdefHi(name):time.sleep(3)print("Hello%s"%name,time.ctime())print("进程号是",os.getpid())if__name__=="__main__":foriinrange(3):t=Process(target=Hi,args=(

1.进程的创建

python 多进程第1张python 多进程第2张
frommultiprocessing import Process
import time,os
def Hi(name):
    time.sleep(3)
    print("Hello %s" %name,time.ctime())
    print("进程号是 ",os.getpid())
if __name__=="__main__":
    for i in range(3):
        t = Process(target=Hi,args=("萌萌",))
        t.start()
    print("主进程号:",os.getpid())
    print("end  all")
View Code

2.进程的阻碍

python 多进程第3张python 多进程第4张
frommultiprocessing import Process
import time,os
def hello(name):
    time.sleep(2)
    print("Hello %s" %name,time.ctime())
    print("进程号是 ",os.getpid())
if __name__=="__main__":
    L=[]
    for i in range(3):
        t= Process(target=hello,args=("梦梦",))
        t.start()
        L.append(t)
    # t.join()
    # t.join() # 阻碍主进程
    for t inL:
        t.join()
    print("主进程号:",os.getpid())
    print("end  all")
View Code

2.2.进程的继承调用

python 多进程第5张python 多进程第6张
from multiprocessing importProcess
importtime,os
classMyProcess(Process):
    #def __init__(self,name):
    #super(MyProcess,self).__init__()
    #self.name =name
    defrun(self):
        time.sleep(1)
        print("hello",self.name,time.ctime())
if __name__ == '__main__':
    p_list=[]
    for i in range(3):
        #p =MyProcess("张三")
        p =MyProcess()
        p.start()
        p_list.append(p)
    #p.join()
    for p inp_list:
        p.join()
    print("end")
View Code

3.进程的守护

#___''Daemon:进程守护、子进程跟随主进程一起退'''

classmyprocess:
    defmusic1(self):
        print("begin to listen %s" %time.ctime())
        time.sleep(2)
        print("stop to listen %s" %time.ctime())
    defgame1(self):
        print("begin to game %s" %time.ctime())
        time.sleep(3)
        print("stop to game %s" %time.ctime())
if __name__ == "__main__":
    duixiang=myprocess()
    p1 = Process(target=duixiang.music1)
    p2 = Process(target=duixiang.game1)
    p2.daemon=True
    L=[]
    L.append(p1)
    L.append(p2)
    for i inL:
        i.start()
    #i.join()
    print("all over end.......")

4.进程通信队列-Queue

from multiprocessing importProcess,Queue
importtime
deffoo(q):
    time.sleep(1)
    q.put(6776)
    q.put({"name":"张三"})

if __name__ == '__main__':
    q =Queue() 
    #q=multiprocessing.Queue()
    #创建一个进程队列
    p=Process(target=foo,args=(q,))
    p.start()
    print(q.get())
    print(q.get_nowait())
    print(q.get(block=False))

5.进程通信-管道Pipe

from multiprocessing importProcess, Pipe
importtime
importos
deff(conn):
    conn.send([12,{"name":"子豪"},"hello"])
    date=conn.recv()
    print("父亲发的消息是",date,time.ctime())
    conn.close()
    print("子进程进程号%s,子进程拿到的数据ID %s:"%(os.getpid(),id(conn)))

if __name__ == '__main__':
    parent_conn,child_conn=Pipe()
    p =Process(target=f,args=(child_conn,))
    p.start()
    sunsend=parent_conn.recv()
    print("儿子发消息是:",sunsend,time.ctime())
    parent_conn.send("儿子,你好")
    parent_conn.close()
    print("父进程进程号%s,父进程拿到的数据ID %s:" %(os.getpid(),id(parent_conn)))
    p.join()

6.进程同步

'''加锁的部分完全是串行的'''
from  multiprocessing importProcess,Lock
importtime
deff(l,i):
    l.acquire()
    time.sleep(1)
    print("hello ",i)
    l.release()
if __name__ == '__main__':
    lock =Lock()
    for num in range(10):
        Process(target=f,args=(lock,num)).start()

7.进程间的数据共享Managers

# ------------------Managers 进程间数据共享-----------------
# # Queue、Pipe 只实现了数据的互交并没有实现数据的共享
from multiprocessing import Manager,Process
import os
def fun(d,L,n):
    d[n]="1" # {"0": "1"}
    d["2"]="2" # {"0": "1","2":"2"}
    L.append(n)
    print('子进程进程号:%s, 字典id %s,列表id %s'%(os.getpid(),id(d),id(L)))
if __name__ == '__main__':
    with Manager() as manager:
        d = manager.dict()
        L = manager.list(range(9))
        for i in range(10):
            p = Process(target=fun,args=(d,L,i))
            p.start()
        p.join()
        print(d)
        print(L)
    print("所有任务都已经结束")
    # print(d)
    # print(L)

8.进程池

python 多进程第7张

deff(i):
    time.sleep(1)
    print(i)
if __name__ == '__main__':
    pool=Pool(5)  #不填参数默认以CPU数量运行
    for i in range(100):
        #pool.apply(func=f,args=(i,)) # 同步接口
        pool.apply_async(func=f,args=(i,))

    pool.close()
    pool.join()
    #进程池的格式先close后join、调用顺序是固定的
    print("over all")

免责声明:文章转载自《python 多进程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微信公众平台token设置.Net WebAPI 访问其他项目层操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python程序的执行过程

1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊! 为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题...

Python三种方法计算皮尔逊相关系数(Pearson correlation coefficient)

文章目录0 皮尔逊系数1 python计算方法1.1 根据公式手写1.2 numpy的函数1.3 scipy.stats中的函数0 皮尔逊系数 在统计学中,皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数(Pearson product-moment correlation coefficient,...

Robot Framework安装环境与导入自定义py模块

①安装python2.7 虽然python2.7据说已经停止更新,但是还是要继续用。 官网下载: https://www.python.org/downloads/windows/ 添加环境变量,将C:Python27和C:Python27Scripts(python2.7安装路径)添加到系统环境变量Path后面。 ②安装Robot Framework...

python打包

python打包 python打包 python打包有一个组织叫python packaging authority(pypa).还有一个python第三方仓库叫Python Package Index(Pypi) 与包有关的两种工具,一种是安装包的工具,另一种工具用于包的创建和分发 安装包的工具 pip安装来自PyPI的包 virtualenv或v...

浅谈pipreqs组件(自动生成需要导入的模块信息) 和 virtualenv(虚拟环境)

一、pipreqs组件 pipreqs的作用 一起开发项目的时候总是要搭建环境和部署环境的,这个时候必须得有个python第三方包的list,一般都叫做requirements.txt。 如果一个项目使用时virtualenv环境,还好办 pip freeze 就可以解决,但是如果一个项目的依赖list没有维护,而且又是环境混用,那就不好整理的呀,不过,这...

Python -扩展C++-Pytorch扩展

1.Python whl 文件和 egg 文件 可以执行和效率是两码事 setup.py用来编译和安装扩展模块。负责编译c++模块,封装成python可以调用的形式 所有能被整合或导入到其它python脚本的代码,都可以被称为扩展 Python调用C库比较简单,不经过任何封装打包成so,直接使用python的ctypes调用即可。 Pytho...