Python3高并发定时更新任务进程池和线程池的使用

  • 背景:需要定时对数据库的某一张表做更新
  • 不管用多线程还是多进程只能利用当前一台机器的计算能力,可以考虑使用celery这样的工具,后期可以横向扩展celery的执行机,也不用考虑生产者消费者模型,celery里面自动都帮我们处理好了,也有消息队列的机制,我们只负责往里面丢任务即可

Django中connections.close_all()的作用

  • 我们链接到mysql的时候,会创建一个链接,这个链接一般都有一个有效期,当新起一个进程的时候会fork父进程里的数据库链接文件,但是这些链接文件可能马上就失效了,万一在我们子进程的任务中突然有一个链接失效就会报错,所以在新起子进程的时候先执行一下这个命令,关闭旧链接,后面用了再创建自己的新链接即可
  • 数据库链接超时的报错不光有mysql gone away,还有各种游标报错,None类型报错等,都可能是由于链接超时或者错误关闭链接导致
  • 如果在子进程里使用了多进程,就会fork出好多链接文件,一不小心就会关闭还需要使用的链接,就会报错,建议传参的时候都穿hash_key,在子进程里再重新查询获取这个对象,这样这个对象的生命周期就可以自己掌控了
  • 但是创建多线程的时候不存在fork,基本不会有断联的情况

进程池的使用

参考:https://www.cnblogs.com/kaituorensheng/p/4465768.html

这个虽然使用的是Python2,但是给的例子里除了print加括号以外,都是可以正常使用的

#coding: utf-8
import multiprocessing
import timedef func(msg):print("msg:", msg)time.sleep(3)print("end")if __name__ == "__main__":pool = multiprocessing.Pool(processes = 3)for i in xrange(4):msg = "hello %d" %(i)pool.apply_async(func, (msg, ))   #维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去print("Mark~ Mark~ Mark~~~~~~~~~~~~~~~~~~~~~~")pool.close()pool.join()   #调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束print("Sub-process(es) done.")

线程池的使用

参考:https://www.jianshu.com/p/b9b3d66aa0be

  • 注意:进程池创建进程的时候,里面第二个参数是元祖,而创建线程池的时候,里面第二个参数就是普通的参数

Python3高并发定时更新任务进程池和线程池的使用相关推荐

  1. 高并发中,那些不得不说的线程池与ThreadPoolExecutor类

    摘要:从整体上认识下线程池中最核心的类之一--ThreadPoolExecutor,关于ThreadPoolExecutor的底层原理和源码实现,以及线程池中的其他技术细节的底层原理和源码实现. 本文 ...

  2. 多线程与高并发(七):详解线程池 - 自定义线程池,JDK自带线程池,ForkJoin,源码解析等

    Executor 接口关系 Callable:类似于Runnable,但是可以有返回值 Future:存储将来执行的结果.Callable被执行完之后的结果,被封装到Future里面. Future ...

  3. python是如何实现进程池和线程池的_高并发:线程、线程锁与线程池(精华),手写代码实现线程池...

    前文: 单线程--多线程的开启--线程锁--线程同步工具--手写连接池--连接池工具类. 一.线程 1.线程的概念 2.线程与进程的关系 3.定义: 区别:如上!!! 4.wait()和sleep() ...

  4. python线程池模块_python并发编程之进程池,线程池,协程

    需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...

  5. python线程池模块_python并发编程之进程池,线程池,协程(Python标准模块--concurrent.futures(并发未来))...

    需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...

  6. python 进程池阻塞和非阻塞_python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)...

    9.11 进程池与线程池 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 池子内什么时候装进程:并发的任务属于计算密集型池子内什么时候装线程:并发的任务属于IO ...

  7. 并发编程之进程池,线程池 和 异步回调,协程

    1.进程池和线程池 2.异步回调 3.协程 4.基于TCP使用多线程实现高并发 一.进程池和线程池 什么是进程池和线程池: ''' 池 Pool 指的是一个容器 线程池就是用来存储线程对象的 容器创建 ...

  8. 并发编程——进程池与线程池

    一.简单介绍 在学习了多进程或多线程之后,我们可能会迫不及待地基于多进程或多线程做一些开发,然而毫无节制的开启进程或线程是十分危险的. 服务开启的进程数或线程数都会随着并发的客户端数目地增多而增多,这 ...

  9. python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...

    1. 2. 为啥要有 进程池和线程池 进程池来控制进程数目,比如httpd的进程模式,规定最小进程数和最大进程数 3.创建进程池的类pool 如果指定numprocess为3,则进程池会从无到有创建三 ...

最新文章

  1. SAP QM 含有Long-term检验特性的检验批UD完成后还能继续录入检验结果?
  2. 5G 在地空通信网络中的需求
  3. 李菲菲课程笔记:Deep Learning for Computer Vision – Introduction to Convolution Neural Networks
  4. 物理化学 多组成系统热力学
  5. 中台不火,天理难容!
  6. 【registry】registry合并带spring boot项目第一弹
  7. springboot配置监听器、过滤器和拦截器
  8. Android精讲--界面编程2(布局管理器)
  9. ios程序后台运行设置(不是太懂)
  10. jQuery 前后端分离项目总结
  11. 【POJ3608】Bridge Across Islands(旋转卡壳求两凸多边形的最短间距)
  12. 染色问题 —— 扇形涂色
  13. 【下降算法】最速下降法、Newton法、共轭梯度法
  14. 关于用LM2596做的DC-DC数控电源
  15. 状态码406解决方式
  16. vue 使用html2canvas实现图片合成,将两张图片合成一张,并下载海报
  17. HDUOJ---携程员工运动会场地问题
  18. TensorFlow系列——一些api的使用场景及方式
  19. 【Excle数据透视表】如何快速选定数据透视表的汇总行并添加绿色底纹
  20. 什么是Galil(加利尔)运动控制卡,它是用来干嘛的呢?galil开发文件dmc32.dll,动态链接库,API

热门文章

  1. JAVA基础--JAVA中的反射机制详解
  2. SQL语句获取数据库名、所有表名、所有字段名及字段类型
  3. ERP笔记2-善用SVN对系统环境进行配置和组织
  4. Arduino的光敏传感器和超声波测距传感器测试代码
  5. gitlab服务器邮箱配置
  6. js、jquery实用小技巧集合
  7. 《正则表达式经典实例(第2版)》——2.19 在替代文本中添加字面文本
  8. 《剑指offer》二叉树镜像
  9. Swift 开源精选-v1.0(进阶篇)
  10. 在Entity Framework中使用存储过程(一):实现存储过程的自动映射