当前位置: 首页 > news >正文

建网站软件有哪些呼叫中心系统厂家排名

建网站软件有哪些,呼叫中心系统厂家排名,宁波正规网站建设方式,wordpress有必要用wafPython程序中的进程操作--—--开启多进程之前我们已经了解了很多进程相关的理论知识#xff0c;了解进程是什么应该不再困难了#xff0c;刚刚我们已经了解了#xff0c;运行中的程序就是一个进程。所有的进程都是通过它的父进程来创建的。因此#xff0c;运行起来的python…Python程序中的进程操作--—--开启多进程之前我们已经了解了很多进程相关的理论知识了解进程是什么应该不再困难了刚刚我们已经了解了运行中的程序就是一个进程。所有的进程都是通过它的父进程来创建的。因此运行起来的python程序也是一个进程那么我们也可以在程序中再创建进程。多个进程可以实现并发效果也就是说当我们的程序中存在多个进程的时候在某些时候就会让程序的执行速度变快。以我们之前所学的知识并不能实现创建进程这个功能所以我们就需要借助python中强大的模块。一、multiprocess模块仔细说来multiprocess不是一个模块而是python中一个操作、管理进程的包。 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块。由于提供的子模块非常多为了方便大家归类记忆我将这部分大致分为四个部分创建进程部分进程同步部分进程池部分进程之间数据共享。二、multiprocess中process模块process模块是一个创建进程的模块借助这个模块就可以完成进程的创建。Process([group [, target [, name [, args [, kwargs]]]]])由该类实例化得到的对象表示一个子进程中的任务(尚未启动)强调需要使用关键字的方式来指定参数args指定的为传给target函数的位置参数是一个元组形式必须有逗号参数介绍group参数未使用值始终为Nonetarget表示调用对象即子进程要执行的任务args表示调用对象的位置参数元组args(1,2,randy,)kwargs表示调用对象的字典kwargs{name:randy,age:18}name为子进程的名称3.1 方法介绍p.start()启动进程并调用该子进程中的p.run()p.run()进程启动时运行的方法正是它去调用target指定的函数我们自定义类的类中一定要实现该方法p.terminate()强制终止进程p不会进行任何清理操作如果p创建了子进程该子进程就成了僵尸进程使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放进而导致死锁p.is_alive()如果p仍然运行返回Truep.join([timeout])主进程等待p终止(强调是主进程处于等的状态而p是处于运行的状态)。timeout是可选的超时时间需要强调的是p.join只能join住start开启的进程而不能join住run开启的进程3.2 属性介绍p.daemon默认值为False如果设为True代表p为后台运行的守护进程当p的父进程终止时p也随之终止并且设定为True后p不能创建自己的新进程必须在p.start()之前设置p.name进程的名称p.pid进程的pidp.exitcode进程在运行时为None、如果为–N表示被信号N结束(了解即可)p.authkey进程的身份验证键,默认是由os.urandom()随机生成的32字符的字符串。这个键的用途是为涉及网络连接的底层进程间通信提供安全性这类连接只有在具有相同的身份验证键时才能成功(了解即可)3.3 在windows中使用process模块注意事项在Windows操作系统中由于没有fork(linux操作系统中创建进程的机制)在创建子进程的时候会自动 import 启动它的这个文件而在 import 的时候又执行了整个文件。因此如果将process()直接写在文件中就会无限递归创建子进程报错。所以必须把创建子进程的部分使用if __name__ __main__ 判断保护起来import 的时候就不会递归运行了。四、使用process模块创建进程在一个python进程中开启子进程start方法和并发效果。4.1在python创建子进程方式一import timefrom multiprocessing import Processdef f(name):print(进程开始)time.sleep(1) # 子进程进入堵塞状态结束后进入就绪状态等待拿到cpu的使用权print(进程结束)time.sleep(1)创建进程这个print语句会执行两次, 原因是创建进程首先执行了当前程序的代码则会执行一次接着创建进程就是复制了一份代码在子进程中还会在执行一次所以就会执行打印两次print(进程测试)if __name__ __main__:# args表示传递的参数创建一个进程他会将主进程的代码复制一份到另外的一个程序而当前的主程序和子程序为异步状态整个的程序会等待所有的主进程和子进程运行完毕之后才结束当前的程序p Process(targetf, args(bob,))p.start()time.sleep(1)print(执行主进程的内容了)进程测试进程测试进程开始2进程结束2主进程4.2 在python中创建子进程方式二from multiprocessing import Processimport timeclass Task(Process):def __init__(self, name):# self.name name # 这样赋值添加属性,在super()__init__时候有重新初始化了,所以要在init下面修改值super().__init__()self.name namedef run(self):print(f子进程的名称{self.name})time.sleep(0.03)print(子进程结束)if __name__ __main__:p Task(randy)p.start() # 想操作系统 发送开启子进程的请求print(主进程)主进程子进程的名称randy子进程结束4.3 python中子进程和主进程的内存空间是隔离的from multiprocessing import Processimport timex 10def task():global xprint(f子进程修改之前{x})x 100print(f子进程修改之后x: {x})if __name__ __main__:p Process(targettask)p.start()time.sleep(0.5)print(f全局x的值 {x})子进程修改之前10子进程修改之后x: 100全局x的值 10python中子进程和主进程的内存空间是隔离的4.4 join方法使用from multiprocessing import Processimport timedef task(x):print(f{x}进程开始)time.sleep(3)print(f{x}进程结束)创建进程这个print语句会执行两次, 原因是创建进程首先执行了当前程序的代码则会执行一次接着创建进程就是复制了一份代码在子进程中还会在执行一次所以就会执行打印两次print(进程测试)if __name__ __main__:p1 Process(targettask, args(1, ))p1.start()# join会阻塞住主进程在等待子进程结束然后在执行join下面的代码(内部会调用wait)p1.join()print(主进程)# p1 Process(targettask, args(1, ))# p1.start()# p2 Process(targettask, args(2, ))# p2.start()# p1.join()# p2.join()4.5 join多个进程时间统计# 实现并行from multiprocessing import Processimport timedef task(x):print(f{x}进程开始)time.sleep(x)print(f{x}进程结束)创建进程这个print语句会执行两次, 原因是创建进程首先执行了当前程序的代码则会执行一次接着创建进程就是复制了一份代码在子进程中还会在执行一次所以就会执行打印两次print(进程测试)if __name__ __main__:p1 Process(targettask, args(1, ))p2 Process(targettask, args(2, ))p3 Process(targettask, args(3, ))# 开始时间start time.time()p1.start()p2.start()p3.start()# join会阻塞住主进程在等待子进程结束然后在执行join下面的代码(内部会调用wait)p1.join()p2.join()p3.join()end time.time()程序运行的时间为3s多主要是因为创建的三个子进程会同时启动会以时间最长的进程为基准print(程序运行时间%s %(end-start)) # 程序运行时间3.5375335216522217# 实现串行from multiprocessing import Processimport timedef task(x):print(f{x}进程开始)time.sleep(x)print(f{x}进程结束)创建进程这个print语句会执行两次, 原因是创建进程首先执行了当前程序的代码则会执行一次接着创建进程就是复制了一份代码在子进程中还会在执行一次所以就会执行打印两次print(进程测试)if __name__ __main__:p1 Process(targettask, args(1, ))p2 Process(targettask, args(2, ))p3 Process(targettask, args(3, ))# 开始时间start time.time()# 实现串行线程会一个一个的执行线程一个线程执行完之后才会执行下一个线程p1.start()p1.join()p2.start()p2.join()p3.start()p3.join()end time.time()程序运行的时间为6s多主要是因为创建的三个子进程会同时启动会以时间最长的进程为基准print(程序运行时间%s %(end-start)) # 程序运行时间7.236638784408569程序运行时间3.5375335216522217程序运行时间7.236638784408569#详细解析如下#进程只要start就会在开始运行了,所以p1-p4.start()时,系统中已经有四个并发的进程了#而我们p1.join()是在等p1结束,没错p1只要不结束主线程就会一直卡在原地,这也是问题的关键#join是让主线程等,而p1-p4仍然是并发执行的,p1.join的时候,其余p2,p3,p4仍然在运行,等#p1.join结束,可能p2,p3,p4早已经结束了,这样p2.join,p3.join.p4.join直接通过检测无需等待# 所以4个join花费的总时间仍然是耗费时间最长的那个进程运行的时间4.6 多个进程同时运行from multiprocessing import Processimport timedef task(x):print(f{x}进程开始)time.sleep(x)print(f{x}进程结束)print(进程测试)if __name__ __main__:start time.time()p_list []# 创建并启动线程for i in range(1,5):p Process(targettask, args(i, ))p.start()p_list.append(p)# 使用join方法for p in p_list:p.join()end time.time()print(程序运行时间%s %(end-start))4.7 查看主进程和子进程的进程号from multiprocessing import Process,current_processimport timeimport osdef task():print(进程开始)time.sleep(0.2)# 在子进程查看自己的pidprint(f在子进程中查看自己的pid: {current_process().pid})print(f在子进程中查看自己的pid: {os.getpid()})# 在子进程中查看父进程pidprint(f在子进程中查看父进程pid: {os.getppid()})print(进程结束)if __name__ __main__:p Process(targettask)p.start()print(f在主进程中查看子进程的pid{p.pid})print(f主进程的pid: {os.getpid()})print(f主进程中父进程pid: {os.getppid()})在window中的进程创建查看pid号他的顺序是从小到大排序,主线程pid大于子线程的pidos.getpid() 获取当前进程的pidos.getppid() 获取当前进程的父进程子进程对象.pid 获取当前进程的子进程的pid进阶多个进程同时运行(注意子进程的执行顺序不是根据启动顺序决定的)4.8 process中常用的属性from multiprocessing import Process,current_processimport timeimport osdef task():print(进程开始)time.sleep(0.2)# 在子进程查看自己的pidprint(f在子进程中查看自己的pid: {current_process().pid})print(进程结束)if __name__ __main__:p Process(targettask)p.start()# 1 查看进程的名称print(p.name)# 2 判断进程是否还存在print(p.is_alive())time.sleep(3)print(p.is_alive())# 3 告诉操作系统结束之后关闭所有进程p2 Process(targettask)p2.start()p2.terminate()print(terminate: , p2.is_alive())p2.join()print(terminate: , p2.is_alive())五、守护进程会随着主进程的结束而结束。主进程创建守护进程其一守护进程会在主进程代码执行结束后就终止其二守护进程内无法再开启子进程,否则抛出异常AssertionError: daemonic processes are not allowed to have children注意进程之间是互相独立的主进程代码运行结束守护进程随即终止。5.1 守护进程的启动import osimport timefrom multiprocessing import Processclass Myprocess(Process):def __init__(self,person):super().__init__()self.person persondef run(self):print(os.getpid(),self.name)print(%s正在和女主播聊天 %self.person)pMyprocess(哪吒)p.daemonTrue # 一定要在p.start()前设置,设置p为守护进程,守护进程中禁止p创建子进程,并且父进程代码执行结束,p即终止运行p.start()time.sleep(10) # 在sleep时查看进程id对应的进程ps -ef|grep idprint(主)5.2主进程代码执行结束守护进程立即结束from multiprocessing import Processdef foo():print(123)time.sleep(1)print(end123)def bar():print(456)time.sleep(3)print(end456)p1Process(targetfoo)p2Process(targetbar)p1.daemonTruep1.start()p2.start()time.sleep(0.1)print(main-------) # 打印该行则主进程代码结束,则守护进程p1应该被终止.#可能会有p1任务执行的打印信息123,因为主进程打印main----时,p1也执行了,但是随即被终止六、socket聊天并发实例6.1 使用多进程是新socket聊天并发-server端from socket import *from multiprocessing import Processserversocket(AF_INET,SOCK_STREAM)server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)server.bind((127.0.0.1,8080))server.listen(5)def talk(conn,client_addr):while True:try:# 注意在这里不能使用input进行交互信息因为是在子进程中输入的所以你输入不对msgconn.recv(1024)if not msg:breakconn.send(msg.upper())except Exception:breakif __name__ __main__: # windows下start进程一定要写到这下面while True:conn,client_addrserver.accept()pProcess(targettalk,args(conn,client_addr))p.start()6.1 使用多进程是新socket聊天并发-client端import socketclient socket.socket()client.connect((127.0.0.1, 8888))while True:msg input(请输入信息)if msg q:breakclient.send(msg.encode(utf-8))data client.recv(1024)print(data)import socketclient socket.socket()client.connect((127.0.0.1, 8888))while True:msg input(请输入信息)if msg q:breakclient.send(msg.encode(utf-8))data client.recv(1024)print(data)
http://www.sadfv.cn/news/44098/

相关文章:

  • 建站公司选址h5开发app用什么框架
  • 搭建网站需要的软件在电脑上怎么做网站
  • 企业怎样做好网站建设企业网站管理系统cms
  • 无锡优化网站价格建设银行网站查余额
  • 旅游网站名称设计seo关键词排名在线查询
  • 如何做网站开发seo狂人
  • 页面锚wordpressseo快速排名软件网址
  • 做国际生意的网站有哪些网站首页轮播图片素材
  • 外贸五金网站招远网站建设哪家好
  • 网站建设代码上传百度刷搜索词
  • 品牌网站设计视频教程wordpress博客评论删除
  • 购物网站留言反馈页面百度seo自动优化
  • 做名片去哪个网站试剂网站建设
  • 网站站点建设分为wordpress调用tag
  • 手机刷机网站大全做网站难吗?
  • 佛山 顺德网站设计延庆手机网站建设
  • cdr 做网站页面网站群集建设
  • 软件网站模版wordpress加速乐
  • 网站上添加图片的原则免费代理上网ip地址
  • 网站建设背景分析论文广东微信网站建设价格
  • 温州高端网站建设中国建设银行网站首页河西网点
  • 长沙网络公司营销推广网站优化 西安
  • 东莞网站建设排行官网建设知识
  • 自己建设网站用哪个马大云湘潭
  • 成都优化网站分析中国十大购物商场排名
  • 贵阳网站制作维护wordpress if分类
  • c 做网站流程seo智能优化系统
  • 合肥企业做网站淡水网络公司做网站
  • 网站备案什么鬼微信自己怎么创建公众号
  • 优秀网站设计流程上海c网站建设