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

佛山顺德网站建设盐城企业建设网站

佛山顺德网站建设,盐城企业建设网站,网站安全证书,中文网站开发Python是运行在解释器中的语言#xff0c;查找资料知道#xff0c;python中有一个全局锁#xff08;GIL#xff09;#xff0c;在使用多线程(Thread)的情况下#xff0c;不能发挥多核的优势。而使用多进程(Multiprocess)#xff0c;则可以发挥多核的优势真正地提高效率。…Python是运行在解释器中的语言查找资料知道python中有一个全局锁GIL在使用多线程(Thread)的情况下不能发挥多核的优势。而使用多进程(Multiprocess)则可以发挥多核的优势真正地提高效率。 即便在多核心处理器上使用GIL的解释器也只允许同一时间执行一个线程。总结Python是一门伪多线程语言 为什么有GIL这个东西 GIL存在目的为了解决多线程之间数据完整性和状态同步问题 GIL存在原因Python中对象的管理是使用引用计数器进行的引用数为0则释放对象涉及到Python的垃圾回收简化了Python对共享资源的管理如 PVM  内存。 import requests import time from threading import Thread from multiprocessing import Processclass MyProcess(multiprocessing.Process):define my process must extends Process classdef run(self):define work contentpass 多线程在IO密集型的操作下似乎也没有很大的优势也许IO操作的任务再繁重一些就能体现出优势在CPU密集型的操作下明显地比单线程线性执行性能更差但是对于网络请求这种忙等阻塞线程的操作多线程的优势便非常显著了。 多进程无论是在CPU密集型还是IO密集型以及网络请求密集型经常发生线程阻塞的操作中都能体现出性能的优势。不过在类似网络请求密集型的操作上与多线程相差无几但却更占用CPU等资源所以对于这种情况下可以选择多线程来执行。 import threading, timeclass Consumer(threading.Thread):def __init__(self):passdef run(self):pass 【Multiprocessing系列】共享资源 在使用多进程的过程中最好不要使用共享资源如果非得使用则请往下看。Multiprocessing类中共享资源可以使用3种方式分别是QueueArrayManager。这三个都是Multiprocessing自带的组件使用起来也非常方便。注意普通的全局变量是不能被子进程所共享的只有通过Multiprocessing组件构造的数据结构可以被共享。 Queue类 使用Multiprocessing.Queue类共享资源share memory只适用Process类 Array、Value类 使用Multiprocessing.Array类共享资源share memory只适用于Process类 Manager类 使用Multiprocessing.Manager类共享资源。可以适用Pool类 说明由于windows操作系统下创建Multiprocessing类对象代码一定要放在main()函数下而linux不需要因此这里区分2个版本。 实例目的父进程在执行子进程的过程中同步判断一个公共资源值如果满足条件则结束所有进程。 进程安全变量 nummultiprocessing.Value(d,10.0) # d表示数值,主进程与子进程共享这个value。主进程与子进程都是用的同一个value nummultiprocessing.Array(i,[1,2,3,4,5]) #主进程与子进程共享这个数组 mydictmultiprocessing.Manager().dict() #主进程与子进程共享这个字典 mylistmultiprocessing.Manager().list(range(5)) #主进程与子进程共享这个List 多进程Demo Pool除了map()外还有可以返回结果的方式那就是apply_async().   apply_async()中只能传递一个值它只会放入一个核进行运算但是传入值时要注意是可迭代的所以在传入值后需要加逗号, 同时需要用get()方法获取返回值 import multiprocessing as mpdef multicore():pool mp.Pool()res pool.map(job, range(5)) # 定义CPU核数量为5print(res)res pool.apply_async(job, (2,)) # 用get获得结果print(res.get())def job(num):result num * numreturn result 【ThreadPoolExecutor系列】 多线程并不能充分利用多核处理器。如果需要充分利用多核处理器可以考虑使用multiprocessing模块进行多进程编程。 从 Python 3.2 开始提供 ThreadPoolExecutor 线程池执行器创建池的最简单方法是作为上下文管理器使用 with 语句来管理池的创建和销毁。如果写过Java程序一定会觉得这个这类相当 的熟悉。 import concurrent.futures# [rest of code]if __name__ __main__:format %(asctime)s: %(message)slogging.basicConfig(formatformat, levellogging.INFO,datefmt%H:%M:%S)with concurrent.futures.ThreadPoolExecutor(max_workers3) as executor:executor.map(thread_function, range(3)) # to_wait {executor.submit(thread_function, **kwargs): idx for idx in range(total)} 线程安全 # 同步使用Lock class FakeDatabase:def __init__(self):self.value 0self._lock threading.Lock()def locked_update(self, name):logging.info(Thread %s: starting update, name)logging.debug(Thread %s about to lock, name)with self._lock:logging.debug(Thread %s has lock, name)local_copy self.valuelocal_copy 1time.sleep(0.1)self.value local_copylogging.debug(Thread %s about to release lock, name)logging.debug(Thread %s after release, name)logging.info(Thread %s: finishing update, name) 使用Condition进行线程间通信 import threading import time# 共享资源 shared_resource None# 创建条件变量 condition threading.Condition()# 定义一个写线程 class WriterThread(threading.Thread):def run(self):global shared_resourcefor _ in range(5):with condition:shared_resource Write dataprint(Writer wrote:, shared_resource)condition.notify() # 通知等待的线程condition.wait() # 等待其他线程通知# 定义一个读线程 class ReaderThread(threading.Thread):def run(self):global shared_resourcefor _ in range(5):with condition:while shared_resource is None:condition.wait() # 等待写线程通知print(Reader read:, shared_resource)shared_resource Nonecondition.notify() # 通知写线程# 创建写线程和读线程 writer_thread WriterThread() reader_thread ReaderThread()# 启动线程 writer_thread.start() reader_thread.start()# 主线程等待所有子线程结束 writer_thread.join() reader_thread.join()print(Main thread exiting) Thread实现定时器 t threading.Timer(30.0, my_function)
http://www.zqtcl.cn/news/385696/

相关文章:

  • 企业网站设计专业好吗做钓鱼网站要具备什么
  • 广西备案工信部网站用asp.net做后台网站
  • 静态网站漏洞wordpress 外卖
  • 暗网做网站温州做网络推广的公司
  • 网站描述 修改上海火迎网络推广运营优化
  • 黄石网站建设哪家专业做个网站费用
  • 免费做的网站怎么设置域名解析宁夏百度seo
  • 化妆品产品的自建网站有哪些阿里云cdn wordpress错位
  • 增加网站流量网站新闻字体
  • 做外贸建网站需要推广吗服装如何做微商城网站
  • 上海市建设安全协会网站查询考试伪静态 wordpress
  • 网站免费建站o网站编程多少钱
  • 建设网站开发海外推广服务
  • 网站建设需要提供的资料文档营销平台建设
  • 做个响应式网站多少钱河南网络推广系统
  • wordpress的后台文章图文发布清远市seo广告优化
  • 长沙的互联网网站公司招标文件免费下载网站
  • icp备案系统网站品网站建设公司排名
  • 什么网站可以做音乐相册可信的品牌网站建设
  • 洛阳网站建设优惠公司网站查询ip地址
  • 学校网站模版电影网站要怎样做才有出路
  • 无锡网站建设 微信企业网站建设与管理期末考试
  • 海南海口网站开发公司怎么建立微网站?
  • 网站建设 鄂icp备app 微网站
  • 西安做网站seo网站站内优化怎么做
  • 建设网站方案公司wordpress 视差主题
  • 网站 建设 语言wordpress同步
  • 三水 网站建设建设部网站网上大厅
  • 深圳高端企业官方网站建设最好的网站设计开发公司
  • 主流大型网站开发语言调查怀柔富阳网站建设