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

py 6.13

#进程池: Pool : 节省系统回收资源的时间,降低操作系统的难度。
#适合纯计算型的程序。  多进程:适合高IO
# from multiprocessing import Pool
#
# def cal(num):
#     print(num*num)
#     return num*'-'     #返回给apply_async提交任务端r。用get获取返回值。
#
# if __name__ == '__main__':
#     p = Pool(5) #进程池的进程数根据:CPU/CPU+1
#     lis =[]
#     for i in range(101):
#         r = p.apply_async(func=cal,args=(i,))(func=函数名,args=参数)#异步操作,提交一个任务。
#         lis.append(r)   #如果每次都get的话,就变成同步操作了。
#     for r_lis in lis:
#         print(r_lis.get())
#     p.close() #与jojn必须同时存在。关闭进程池(里面进程不会结束)防止进一步操作,不再接收新的任务。
#     p.join()  #等待所有子进程结束后再结束主代码,否则主进程会直接结束。必须放在close后面。

#p.apply:同步提交任务,失去了多进程的作用。
#p.map: 与p.apply_async功能一样,省略了close和join,但是没有返回值。
# from multiprocessing import Pool
#
# def cal(num):
#     print(num*num)
#
# if __name__ == '__main__':
#     p = Pool(5)
#     p.map(func=cal,iterable =range(101)) #(func= 函数名,iterable = 可迭代对象)
    #不需要关闭和阻塞。
#进城池中的回调函数
# import os
# from multiprocessing import  Pool
#
# def wahaha():
#     return 5
#
# def call(argv):#接收一个参数,接收的是wahaha的返回值。
#     print(os.getpid())#跟主进程的pid相同,利用的是主进程的资源。原因:在子进程工作且主进程
#     print(argv)       #空闲时,利用主进程来进程一些简单的运算分析。
#
# if __name__ == '__main__':
#     print(os.getpid())
#     p = Pool(5)
#     p.apply_async(func=wahaha,callback=call)#call:回调函数名 . 接收wahaha中的返回值。
#     p.close()
#     p.join()
进程池

 

#Pipe:管道。lr,lp = Pipe() 管道的两端有一端不用的时候都需要关闭。
#管道的数据不安全。队列的实现机制:管道+锁。
# from multiprocessing import Process,Pipe
#
# def func(lr,rp):
#     lr.close()  #将不用的发送端关闭,管道中依据引用计数,必须关闭所有管道才能生成EOFError异常。
#     while True:
#         try:
#             print(rp.recv())
#         except EOFError:break
#
# if __name__ == '__main__':
#     lr ,rp = Pipe() #创建管道的两端
#     Process(target=func,args=(lr,rp)).start()#可开启多个子进程
#     lr.send('hello') #一端发送。
#     rp.close() #将不用的接收端关闭
#     lr.close() #发送完毕后将发送端关闭,使子进程报错,进入异常处理
#进程间可以数据共享,如列表字典,但是会造成数据混乱。、
管道

 

# import time
# import random
# from multiprocessing import Process,Queue
#    
# def consumer(q):
#     while True:
#         obj = q.get()
#         if obj == None:break
#         print('消费了一个数据%s'%obj)
#         time.sleep(random.randint(1,3))
#
# def produser(q):
#     for i in range(10):
#         time.sleep(random.randint(1,5))
#         q.put('food%s'%i)
#         print('生产了一个food%s'%i)
#
# if __name__ == '__main__':
#     q = Queue()
#     p = Process(target=consumer,args=(q,))
#     p.start()
#tcp协议实现与多客户端通信。1.socketserver 2:创建多个进程与client通信。
#队列。生产消费模型:
# import time
# import random
# from multiprocessing import Process,Queue
#
# def consumer(name,q):
#     while True:
#         obj = q.get()  #如果队列中无值可取,则阻塞,等待放值再取值。
#         if obj == None:break #主中等待生产函数完成时,往队列里放了与消费者数等同的None.
#         print('%s拿出了一个数据%s'%(name,obj))
#         time.sleep(random.randint(1,3))
#
# def produser(name,q):
#     for i in range(10):
#         time.sleep(random.randint(1,5))
#         q.put('food%s'%i) #循环一次放入一个,可以有多个生产者一起异步生产。
#         print('%s放入了一个数据food%s'%(name,i))
#
# if __name__ == '__main__':
#     q = Queue()
#     # p1 = Process(target=consumer,args=('alex',q))
#     p2 = Process(target=consumer,args=('egon',q)) #创建多个消费者,将姓名与队列对象传进去。
#     p3 = Process(target=produser,args=('zhangsan',q))#创建多个生产者
#     p4 = Process(target=produser,args=('lisi',q))
#     lis = [p2,p3,p4]      #由于创建进程较多,可以循环开启。
#     for p in lis:
#         p.start()
#     p3.join()     #为使消费者get不阻塞,需要放入一个标志位使消费者知道已经生产完成了,所以将生成函数阻塞,等到所有生产
#     p4.join()     #函数结束时,执行下面加None标志位的代码。
#     q.put(None)   #有几个消费者就加几个,否则有的取不到就会等待。程序无法结束。
#     q.put(None)
#JoinableQueue:不用加标志位告知,通过感知task_done执行是否完成来判断队列是否为空,生产是否完成。、
# import time
# import random
# from multiprocessing import Process,JoinableQueue
#
# def consumer(name,q):
#     while True:
#         obj = q.get()  #不能根据get判断是否取完,因为get到数据后需要处理,不能马上结束。
#         if obj == None:break
#         print('%s吃了%s'%(name,obj))
#         time.sleep(random.randint(1,3))
#         q.task_done()  #告知队列已经取了一次数据。如果一共10个数据,则取10次。
#
# def produser(name,q):
#     for i in range(10):
#         time.sleep(random.randint(1,5))
#         q.put('第%s坨屎'%i)
#         print('%s拉了第%s坨屎'%(name,i))
#
# if __name__ == '__main__':
#     q = JoinableQueue()
#     p1 = Process(target=consumer,args=('吕杨',q))
#     p1.daemon = True  #将消费者进程设为守护进程。
#     p2 = Process(target=consumer,args=('李淑旗',q))
#     p2.daemon = True
#     p3 = Process(target=produser,args=('la',q))
#     p4 = Process(target=produser,args=('lala',q))
#     lis = [p1,p2,p3,p4]
#     for p in lis:
#         p.start()
#     p3.join()
#     p4.join()
#     q.join() #阻塞队列。判断task_done执行次数是否完成。执行完以后则解除阻塞,代码往下执行。
#     print('吃完了')#主代码结束以后守护进程(消费者函数)也随之结束。
#队列内部自带互斥锁,不会出现几个进程同时取一个数据的情况。维护先进先出的顺序,保证了数据的安全。
队列

 

转载于:https://www.cnblogs.com/liujjpeipei/p/9179402.html

相关文章:

  • Amazon推新送货无人机Prime Air
  • vue-music 关于playlist (底部播放列表组件)
  • 爬虫基础 2.4 会话和cookie
  • Spring boot的简单rest服务(非xml方式配置)
  • Servlet
  • Confluence 6 配置自动备份
  • 微软云端套用新模型增加精准度 减少预测模型误差
  • 【多线程系列】AQS CAS简单介绍
  • CF1063F String Journey
  • JPA(三):JPA基本注解
  • 有哪些不用编写代码就能轻松制作生成HTML5页面的工具
  • Spring Session产生的sessionid与cookies中的sessionid不一样的问题 httpOnly 设置不起作用的问题??...
  • JS中的prototype、__proto__与constructor(图解)
  • 美丽的闭包,在js中实现函数重载
  • Android 自定义时钟控件 时针、分针、秒针的绘制这一篇就够了
  • 【RocksDB】TransactionDB源码分析
  • 2017-09-12 前端日报
  • Electron入门介绍
  • HTTP--网络协议分层,http历史(二)
  • k8s如何管理Pod
  • Promise初体验
  • React的组件模式
  • Shadow DOM 内部构造及如何构建独立组件
  • SQLServer之创建数据库快照
  • TCP拥塞控制
  • 基于 Babel 的 npm 包最小化设置
  • 前端性能优化--懒加载和预加载
  • 设计模式 开闭原则
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 温故知新之javascript面向对象
  • 用jQuery怎么做到前后端分离
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • ​你们这样子,耽误我的工作进度怎么办?
  • #{} 和 ${}区别
  • #Spring-boot高级
  • (day 12)JavaScript学习笔记(数组3)
  • (Java)【深基9.例1】选举学生会
  • (k8s中)docker netty OOM问题记录
  • (二)springcloud实战之config配置中心
  • (分布式缓存)Redis分片集群
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (汇总)os模块以及shutil模块对文件的操作
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)Windows2003安全设置/维护
  • (转)德国人的记事本
  • (转)项目管理杂谈-我所期望的新人
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Remoting学习笔记(三)信道
  • .NET中 MVC 工厂模式浅析
  • .sh 的运行
  • [20171113]修改表结构删除列相关问题4.txt
  • [C\C++]读入优化【技巧】