一、线程、进程

建议进程池,可以更好地控制进程数量

进程是资源分配的基本单位。

线程是任务调度和分配的基本单位。

  • 打印线程 id:

    • threading.currentThread()  # type 是 %s

      • <TestThread(Thread-1, started 1106852192)>
    • threading.currentThread().ident  # type 是 %d
      • 1106852192
  • 打印进程 id :
    • 当前进程:os.getpid(%s)
    • 父进程:os.getppid(%d)

1. 线程

#!/usr/bin/env python
# -*- coding: utf-8 -*-import multiprocessing
import time
import osdef run(process_name):print('process { %s } PID { %s }, parent process ID { %s }, start time { %s }'% (process_name, os.getpid(), os.getppid(), time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))time.sleep(1)print('process { %s } PID { %s }, end time { %s }'% (process_name, os.getpid(), time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))def main():threads = []for i in range(0, 3):p_test = multiprocessing.Process(target=run, args=("Process - " + str(i), ))p_test.start()threads.append(p_test)for thread in threads:thread.join()if __name__ == "__main__":main()

2. 进程

#!/usr/bin/env python
# -*- coding: utf-8 -*-import threading
import time
import osclass TestThread(threading.Thread):def __init__(self, process_name):super(TestThread, self).__init__()self.process_name = process_namedef run(self):print('process { %s } PID { %s }, parent process ID { %s }, start time { %s }'% (self.process_name, os.getpid(), os.getppid(), time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))time.sleep(1)print('process { %s } PID { %s }, end time { %s }'% (self.process_name, os.getpid(), time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))def main():threads = []for i in range(0, 3):p_test = TestThread("Process - " + str(i))p_test.start()threads.append(p_test)for thread in threads:thread.join()if __name__ == "__main__":main()

3. 进程池

#!/usr/bin/env python
# -*- coding: utf-8 -*-import multiprocessing
import time
import osdef run(process_name):print('process { %s } PID { %s }, parent process ID { %s }, start time { %s }'% (process_name, os.getpid(), os.getppid(), time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))time.sleep(1)print('process { %s } PID { %s }, end time { %s }'% (process_name, os.getpid(), time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())))def main():pool = multiprocessing.Pool(processes=2)for i in range(0, 3):return_result = pool.apply_async(run, args=("Process - " + str(i), ))pool.close()pool.join()if __name__ == "__main__":main()

4、进程间通信

  • 管道
  • 消息队列
  • 共享内存
  • Semaphore

二、单例模式:

1. 饿汉式(线程安全)

  • __new__() 是由 object 基类提供的内置静态方法;
  • 在通过类名来创建对象的时候,python 的解释器解释器会首先调用 __new__() 分配空间并获得对象的引用;
  • 然后,将引用作为第一个参数传递给 __init__() 方法。
import threadingclass HungrySingleton(object):def __init__(self):if not self._instance:print('调用__init__, 实例未创建')else:print('调用__init__,实例已经创建过了:', self._instance)def __new__(cls, *args, **kwargs):if not hasattr(cls, '_instance'):HungrySingleton._instance = super().__new__(cls)return HungrySingleton._instancedef task(arg):obj = HungrySingleton()print("obj : {obj} \n".format(obj=obj))for i in range(3):t = threading.Thread(target=task, args=[i, ])t.start()

2. 懒汉式(线程不安全)

import threadingclass LazySingleton(object):__instance = Nonedef __init__(self):if not LazySingleton.__instance:print('调用__init__, 实例未创建')else:print('调用__init__,实例已经创建过了:', LazySingleton.__instance)@classmethoddef get_instance(cls):if not cls.__instance:cls.__instance = LazySingleton()return cls.__instancedef task(arg):obj = LazySingleton().get_instance()print("obj : {obj} \n".format(obj=obj))for i in range(3):t = threading.Thread(target=task, args=[i, ])t.start()

运行结果:

3. 线程安全懒汉式

import threadingclass LazySingleton(object):__instance = None_instance_lock = threading.Lock()def __init__(self):if not LazySingleton.__instance:print('调用__init__, 实例未创建')else:print('调用__init__,实例已经创建过了:', LazySingleton.__instance)@classmethoddef get_instance(cls):if not cls.__instance:with LazySingleton._instance_lock:if not cls.__instance:cls.__instance = LazySingleton()return cls.__instancedef task(arg):obj = LazySingleton().get_instance()print("obj : {obj} \n".format(obj=obj))for i in range(3):t = threading.Thread(target=task, args=[i, ])t.start()

Python 进程和设计模式相关推荐

  1. python进程通信方式总结(一):管道与信号量

    进程介绍 一个独立进程不受其他进程执行的影响,而一个协作进程可能会受到其他执行进程的影响,尽管可以认为那些独立运行的进程将非常高效地执行,但实际上,在许多情况下,可以利用合作性质来提高计算速度,便利性 ...

  2. python进程和线程_Python进程与线程知识

    好程序员Python 培训分享进程与线程知识 , Python 开发语言现在已经是被大家非常看中的编程语言了,本篇文章给读者们分享一下 Python 进程与线程知识小结,本篇文章具有一定的参考借鉴价值 ...

  3. Python进程、线程、协程详解

    进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...

  4. Python 进程之间共享数据(全局变量)

    Python 进程之间共享数据(全局变量) 进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的 ...

  5. python的用途实例-python进程池作用展示及实例解析

    在以下的文章之中我们来了解一下什么是python中的进程池.了解一下python进程池的相关知识,以及进程池在python编程之中能起到什么样的作用. 进程池 Pool类描述了一个工作进程池,他有几种 ...

  6. python进程、线程的学习心得

    什么是多线程竞争? 线程不是独立的,同一个进程里的线程,线程间的数据是共享的,多线程操作时,容易造成数据的混乱,线程不安全. 如何解决? 互斥锁. 好处:能够保证某段关键代码执行时,只有一个线程操作, ...

  7. python进程池调用实例方法_Python进程池Pool应用实例分析

    本文实例讲述了Python进程池Pool应用.分享给大家供大家参考,具体如下: 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百 ...

  8. python进程共享全局变量 时延_Python 进程之间共享数据(全局变量)的方法

    进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的值,主进程跟着改变 if __name__= ...

  9. python进程、线程、协程

    基本观点: 1.一个python进程一个GIL(全局锁),每个线程需要获取这个锁才能执行. 2.cpu密集型的程序,使用多进程. 3.IO密集型的程序,多线程可能会比多进程快. 4.多核cpu执行多进 ...

最新文章

  1. 分页控件 WebPager [ZT]
  2. nero 8.0刻录系统光盘
  3. SAP中采购订单状态与MRP的关系
  4. 浅谈物联网时代智能停车发展趋势
  5. PHP盈亏问题,小升初数学必考经典应用题—盈亏问题!(附经典例题分析)
  6. 使多个线程循环输出0-99-0-99
  7. mysql error log清理_手动删除mysql日志/var/log/mysql/error.log导致的mysql无法启动
  8. 面试官 | 如何优雅的设计Java 异常?
  9. 你必须掌握的Java类库工具包Hutool,真甜!(高级篇)
  10. Python调用百度接口(情感倾向分析)和讯飞接口(语音识别、关键词提取)处理音频文件...
  11. 单机 搭建kafka集群 本地_10分钟搭建单机Kafka集群
  12. iphone clearColor 不起作用问题
  13. js 延迟几秒执行_息息相关的 JS 同步,异步和事件轮询
  14. 交通灯控制(软件延时法)C语言,智能交通灯控制系统软件部分(49页)-原创力文档...
  15. 软考 - 网络工程师考试大纲
  16. [转载] Windows使用WakeOnLan配置【较详细】
  17. 7-88 求一元二次方程的根
  18. Android知识架构 · Java的编程思想
  19. 稳定性和高可用如何保障?一手测评华为云网站高可用解决方案
  20. 保护你的眼睛——设置电脑屏幕颜色和ClearType字体

热门文章

  1. LabVIEW学习笔记十三:窗格详解(调整窗格大小时缩放特定对象)
  2. SQLSERVER完全优化教程
  3. “笨办法”学Python3,Zed A. Shaw, 习题7
  4. 招商银行2021FinTech精英训练营数据赛道方案分享
  5. 9.HTML5 JavaScript DHTML
  6. linux服务器安装zip解压缩工具
  7. 有数Bizhelp帮助文档在线制作软件官方
  8. 计算机图形学四:抗锯齿SSAA及MSAA算法和遮挡剔除Z-Buffer算法
  9. jQuery插件 -- jQuery UI插件
  10. 【已解决】VMware Workstation cannot connect to the virtual machine. Make sure you have rights to run the