目录

  • 10.1 使用多进程模块
  • 10.2 将工作分布到多个线程

《Python 3 程序开发指南》学习笔记

有俩种方法可以对工作载荷进行分布,一种是使用多进程,另一种是使用多线程。

10.1 使用多进程模块

我们可以使用Python的subprocess模块来实现这一需求,改模块提供了运行其他程序的功能,可以传递我们需要的任意命令行参数,并且,如果需要,还可以使用管道在其中进行通信。


#maincontrol.py
import subprocess
import os, sysdef main():child = os.path.join(os.path.dirname(__file__),"subcontrol.py")pipes = []s = "See you again, Robot {0}"for i in range(10):command = [sys.executable, child]pipe = subprocess.Popen(command, stdin=subprocess.PIPE)pipes.append(pipe)pipe.stdin.write(s.format(i).encode("utf-8") + b"\n") #subprocess模块读写的是字节,而并不是字符串pipe.stdin.close()while pipes:print("?????")pipe = pipes.pop()pipe.wait()print("#####")if __name__ == "__main__":main()
#subcontrol.pyimport syssys.stdin = sys.stdin.detach()
stdin = sys.stdin.read()
lines = stdin.decode("utf8", "ignore")
print(lines)

或者

#subcontrol.py
import sysstdin = sys.stdin.buffer.read()
lines = stdin.decode("utf8", "ignore")
print(lines)

输出为:

?????
See you again, Robot 0See you again, Robot 3See you again, Robot 1See you again, Robot 7See you again, Robot 6See you again, Robot 9See you again, Robot 5See you again, Robot 8See you again, Robot 2#####
?????
#####
?????
#####
?????
#####
?????
#####
?????
See you again, Robot 4#####
?????
#####
?????
#####
?????
#####
?????
#####

可以发现,先创建的进程不一定能够先完成。

subprocess模块学习

10.2 将工作分布到多个线程

多个线程共享数据的时候,可能会发生另个现成对现有的数据进行了不当的修改,常见的解决的方案是使用某种锁机制。通过将共享数据的存取劝降限定在锁的作用范围之内,可以保证共享数据在同一个时刻只能由一个线程进行存取,即便这种保护不是直接的。

锁机制存在的一个问题是存在死锁的风险。比如,thread#1请求锁A并在此基础上请求锁B,但是thread#1不能锁B,因为此时thread#2以及锁B,只有当thread#2解锁B,thread#1才能锁B,万一不巧,这个时候thread#2也请求锁B,那么就会发生死锁,俩个线程都被阻塞。

线程的内容就看了一下, threading模块:
here

转载于:https://www.cnblogs.com/MTandHJ/p/11225812.html

Python Revisited Day10 (进程与线程)相关推荐

  1. 怎么更进一步学python_【百尺竿头,更进一步学Python】Python进阶课程——进程,线程和协程的区别...

    本文带来各类奇怪的IT百科知识. [百尺竿头,更进一步学Python]Python进阶课程--进程:线程和协程的区别 现在多进程多线程已经是老生常谈了:协程也在最近几年流行起来.今天我们本文主要介绍进 ...

  2. python线程与进程视频教程_[PYTHON系列教程]→进程 vs. 线程

    我们介绍了多进程和多线程,这是实现多任务最常用的两种方式.现在,我们来讨论一下这两种方式的优缺点.首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Work ...

  3. python笔记06_进程vs线程

    进程 vs. 线程 多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程.(当然主进程挂了所有进程就全挂了,但是Master进程只负责分配任务,挂掉的概率低)著名的Apa ...

  4. Python中的进程和线程

    一.Python中两种创建进程的方式 1.os.fork只适用于Linux/Mac 2.使用multiprocessing模块可以跨平台实现多进程 使用os.fork(),像Linux平台上那样创建多 ...

  5. python并发编程-进程池线程池-协程-I/O模型-04

    目录 进程池线程池的使用***** 进程池/线程池的创建和提交回调 验证复用池子里的线程或进程 异步回调机制 通过闭包给回调函数添加额外参数(扩展) 协程*** 概念回顾(协程这里再理一下) 如何实现 ...

  6. Python基础:进程、线程、协程(2)

    进程与线程 什么是进程(process)? An executing instance of a program is called a process. Each process provides ...

  7. Python中的进程和线程(20)

    进程和线程 进程 创建多进程 进程和全局变量 传递参数和进程号 进程的状态 进程之间通信 put() get()方法 生产者和消费者 进程子类化 生产者和消费者子类化 进程池 线程 线程子类化 共享全 ...

  8. Python 并发1 进程,线程

    Python 并发1: 进程,线程 相信大家在操作系统就了解过 进程,线程,死锁,系统调度等等,对基本的概念还是有的.但是,在实践的过程上我在python上的实现却略有不足.所以重新入门Python并 ...

  9. python并发编程--进程、线程、协程、锁、池、队列

    文章目录 操作系统的概念 进程 multiprocessing模块 守护进程 使用多进程实现一个并发的socket的server 锁 生产者消费者模型 数据共享 线程threading模块 守护线程和 ...

  10. Python多任务(8.进程与线程之间的区别以及多进程和多线程的区别 )

    1. 进程.线程的对比 进程,能够完成多任务,比如:  一台电脑上可以运行登录多个QQ 线程,能够完成多任务,比如: 一个QQ中可以和有多个聊天窗口 进程里面包含线程,线程不能够独立执行,必须依存在进 ...

最新文章

  1. 关于MySQL count(distinct) 逻辑的另一个bug
  2. sql中的text字段如何导入oracle
  3. 简单使用XPOSED实现一机多号
  4. mybatis的二级缓存
  5. 如何在Word,Excel和PowerPoint 2010中裁剪图片
  6. 【微信插件】P3微信插件测试使用步骤
  7. PHP常见缓存技术分析(cache)
  8. excel vba真正的动态数组实例-按需定义数组大小
  9. 3.数据类型和变量---用Python做数学运算
  10. long 雪花算法_一次复杂的雪花算法使用总结
  11. android的listview单项中包含RadioButton,实现RadioButton的单选显示效果
  12. 101页海康威视-可视化智慧城管系统建设方案(附下载)
  13. 一文了解机器人伺服系统
  14. 推荐10个免费的html,10个免费的HTML在线编辑工具
  15. 液晶显示屏的C语言编码,AT89C51单片机驱动液晶显示汉字C语言
  16. (转载)你真的理解Android AIDL中的in,out,inout么?
  17. Xu_Learning_to_Restore_Low-Light_Images_via_Decomposition-and-Enhancement_CVPR_2020_paper
  18. 什么是职业测评?做职业测评有什么作用?
  19. 地理坐标系,投影坐标系区别
  20. ionic 打 android 出现 Current working directory is not a Cordova-based project.

热门文章

  1. 广州海珠php培训_海珠|海珠区第二实验小学教育集团成立两周年 初步实现集团内教师资源的“柔性流动”...
  2. OpenCV-图像处理(24、直方图计算)
  3. 小知识--DOS命令1
  4. 小米蓝牙耳机驱动_小米降噪项圈蓝牙耳机上手
  5. linux下回收站在哪个文件夹,linux回收站在哪里
  6. NYOJ 371 机器人II
  7. java 应用编程接口_java 应用程序接口(api)是什么
  8. hot编码 字符one_使用字符级RNN进行名字分类
  9. iphone分屏功能怎么用_除iOS12.4苹果还为旧款设备推送了更新 来看iPhone迁移怎么用...
  10. Android之简单的BMI计算器(运用两个界面跳转显示)