Process
涉及模块:multiprocessing


  • Process

    • p = Process()
    • p.start()
    • p.join()
from multiprocessing import Process
import os# 子进程要执行的代码
def run_proc(name):print('Run child process %s (%s)...' % (name, os.getpid()))if __name__=='__main__':print('Parent process %s.' % os.getpid())p = Process(target=run_proc, args=('test',))print('Child process will start.')p.start()p.join()print('Child process end.')
  • Pool

    • p=Pool(5)
    • p.apply_async(func,**args)
    • p.close()
    • p.join()
from multiprocessing import Pool
import os, time, randomdef long_time_task(name):print('Run task %s (%s)...' % (name, os.getpid()))start = time.time()time.sleep(random.random() * 3)end = time.time()print('Task %s runs %0.2f seconds.' % (name, (end - start)))if __name__=='__main__':print('Parent process %s.' % os.getpid())p = Pool(4)for i in range(5):p.apply_async(long_time_task, args=(i,))print('Waiting for all subprocesses done...')p.close()p.join()print('All subprocesses done.')

Thread
涉及模块:threading

  • Thread

    • t = threading.Thread(target=xxx,name=xxx,args=(xxx,xxx))
    • t.start()
    • t.join()
    • threading.curent_thread().name
    • l = threading.Lock()
    • l.acquire()
    • l.release()
import time, threading# 新线程执行的代码:
def loop(s):print(s)print('thread %s is running...' % threading.current_thread().name)n = 0while n < 5:n = n + 1print('thread %s >>> %s' % (threading.current_thread().name, n))time.sleep(1)print('thread %s ended.' % threading.current_thread().name)print('thread %s is running...' % threading.current_thread().name)
t = threading.Thread(target=loop, name='LoopThread', args=('a',))
t.start()
t.join()
print('thread %s ended.' % threading.current_thread().name)
  • ThreadLocal

    • 线程中共享所有的全局变量,需注意是否会死锁
    • 局部只有当前线程可以进行操作,但调用会很麻烦
    • local = threading.local()
import threading# 创建全局ThreadLocal对象:
local_school = threading.local()def process_student():# 获取当前线程关联的student:std = local_school.studentprint('Hello, %s (in %s)' % (std, threading.current_thread().name))def process_thread(name):# 绑定ThreadLocal的student:local_school.student = nameprocess_student()t1 = threading.Thread(target= process_thread, args=('Alice',), name='Thread-A')
t2 = threading.Thread(target= process_thread, args=('Bob',), name='Thread-B')
t1.start()
t2.start()
t1.join()
t2.join()

第三方进程与线程模块
涉及模块:concurrent.futures

  • ThreadPoolExecutor、ProcessPoolExecutor

    • submit
    • map
    • concurrent.futures.as_completed
  • zip
    • 拼接
    • zip((1,2),(10,20)) ->((1,10),(2,20))
def sim_add(a):return a[0]+a[1]from concurrent.futures import ThreadPoolExecutor
import concurrent.futureswith ThreadPoolExecutor(max_workers=1) as t1:future1 = t1.submit(sim_add,(1,2))print(future1.result())print()
var = [(1,2),(10,20),(100,200)]
with ThreadPoolExecutor(max_workers=2) as t:future = {t.submit(sim_add,tem): tem for tem in var}for parameter,res in zip(var,concurrent.futures.as_completed(future)):print("sim_add %s,return %s" % (parameter,res))# 多次submit,不接收结果但是又想全部执行完# concurrent.futures.wait()
print()
with ThreadPoolExecutor(max_workers=2) as t:for f in t.map(sim_add,[(1,2),(2,3)]):print(f)

转载于:https://www.cnblogs.com/simfg/p/7531881.html

Python 进程与线程小随笔相关推荐

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

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

  2. python进程和线程

    python 进程和线程 概念 GIL: 全局解释锁,解决了不同线程同时访问统一资源时,数据保护问题.python 虽然是多线程,但是因为GIL,实际上是是单线程,由CPU轮询,假线程.(一个线程运行 ...

  3. python进程与线程_Python进程与线程知识

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

  4. python 进程,线程,协程篇

    python 进程,线程,协程篇 ssh 线程 进程 线程,进程区别 threading 模块,两种调用方式 python GIL全局解释器锁(Global Interpreter Lock) Joi ...

  5. Python进程和线程保姆式教学,1个台机子多只手干活的秘籍

    进程线程有多重要?刚开始学Python的时候你可能还没有感觉到,因为你写的代码从上到下执行一遍就可以了,但实际上这很初级,实际开发写项目的时候,为了充分利用电脑配置来加快程序进度,我们往往会用到多进程 ...

  6. python进程、线程、协程

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

  7. Python 进程、线程、协程

    进程.线程.协程 一.线程 1. 进程和线程 线程:计算机中可以被cpu调度的最小单元(真正在工作). 进程:计算机资源分配的最小单元(进程为线程提供资源). #如容器,资源隔离使用的进程级别隔离.一 ...

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

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

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

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

最新文章

  1. Leetcode 378. 有序矩阵中第K小的元素 解题思路及C++实现
  2. 【python进阶】_正则表达式
  3. Abap DELETE - duplicates
  4. activiti 工作流_activiti-boot快速开发工作流框架
  5. 从0到1简易区块链开发手册V0.6-实现打印区块
  6. 教程:Visual Studio 连接 MySQL 数据库(包含常见错误及解决方法)
  7. 用IT技术玩金融系列文章
  8. IEEE VIS 2018专题
  9. java培训一般有哪些课程_java培训有哪些课程
  10. 2019年北航、南大、东南、上科大及本校计算机系保研
  11. PHP Screw php代码解密,运用php screw进行源代码加密
  12. HTML列表、表格与媒体元素
  13. 你遇到过哪些质量很高的 Java 面试?
  14. java计算机毕业设计H5乡镇疫情防控系统源码+mysql数据库+系统+lw文档+部署
  15. 好用的在线工具,提高你的办公工作效率
  16. 一文读懂 HTTPS 与 TLS证书链校验
  17. 对于跳过Google应用SetupWizard.apk以及其他设备软件包名
  18. kotlin_基础_密封类(sealed)
  19. 输出N阶方阵 ,输出该方阵及方阵主对角线的总和
  20. word转pdf时图片模糊/分辨率不高解决方案

热门文章

  1. [华为机试练习题]5.IP地址推断有效性
  2. ASP.Net MVC——使用 ITextSharp 完美解决HTML转PDF(中文也可以)
  3. mac下android环境搭建笔记(android studio)
  4. CCNP学习笔记2-路由部分--EIGRP
  5. Cassandra - Insert after Delete fails silently
  6. 转载: Web 研发模式演变
  7. 日志管理:(三)配置_JCL+Log4J中遇到的问题
  8. SpringSecurity分布式整合之分布式认证流程说明
  9. Spring Cloud Stream 与 Kafka 整合
  10. 简单了解各种序列化技术-Protobuf序列化框架