Python自学成才之路 多进程开发
时间:2022-07-24
本文章向大家介绍Python自学成才之路 多进程开发,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在python中可以通过os.fork()创建子进程,但是这种方式只能在linux,unix,mac下面使用,不能跨平台,所以一般不推荐使用这种方式。Python提供了一个multiprocessing模块来创建多进程,这种方式写起来更简单,且支持跨平台,一般推荐使用multiprocessing模块来创建多线程。
1.使用Process来创建进程
from multiprocessing import Process
import os
def pringLog(msg):
print(msg)
print('子进程id: %s' % os.getpid())
print('父进程id: %s' % os.getppid())
if __name__ == '__main__':
p = Process(target=pringLog, args=('hello world',))
p.start()
print('父进程id: %s' % os.getpid())
print("我是主进程代码")
输出:
父进程id: 34076
我是主进程代码
hello world
子进程id: 30084
父进程id: 34076
注意:如果是在windows系统下,创建进程的代码需要放在__name__ == '_main_'下面,否则会报错。
2.通过继承Process来创建进程
from multiprocessing import Process
import os
import time
class MyProcess(Process):
def run(self):
print('子进程id %s' %os.getpid())
print('父进程id %s' % os.getppid())
for x in range(5):
print('子进程 %s' %x)
time.sleep(1)
if __name__ == '__main__':
myprocess = MyProcess()
myprocess.start()
myprocess.join()
print('所有进程执行完毕')
输出:
子进程id 23388
父进程id 29012
子进程 0
子进程 1
子进程 2
子进程 3
子进程 4
所有进程执行完毕
3.一个小技能,join函数 Join可以让主进程阻塞,直到子进程执行完毕才会执行主进程后面的代码,通过添加超时参数,还能控制阻塞时长。
from multiprocessing import Process
import time
def countdown():
for x in range(5):
print("count:%s" % x)
time.sleep(1)
if __name__ == '__main__':
p = Process(target=countdown)
p.start()
print('主进程')
# 一直阻塞,直到子进程执行完毕
# p.join()
# 阻塞三秒
p.join(3)
print('所有进程执行完毕')
输出:
主进程
count:0
count:1
count:2
所有进程执行完毕
count:3
count:4
- 点击块,让小块动起来 - 函数封装
- 玩玩文本挖掘-wordcloud、主题模型与文本分类
- Typecho 前台 getshell 漏洞分析
- 关于其他选择器以及选择器优先级详解
- 2016.05 第二周 群问题分享
- MyFlash——美团点评的开源MySQL闪回工具
- R语言关联规则可视化:扩展包arulesViz的介绍
- JS设置标签的内容和样式
- 大圣魔方——美团点评酒旅BI报表工具平台开发实践
- 详析获取标签
- 深度学习及AR在移动端打车场景下的应用
- R案例操作:RQDA和tm包结合进行文本挖掘
- 用Vue.js开发微信小程序:开源框架mpvue解析
- 分类模型的性能评估——以SAS Logistic回归为例: 混淆矩阵
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ArrayList源码阅读笔记
- 3分钟短文 | Laravel表单验证没规则可用?你试试自定义,真香!
- 【C#】DataGridView 数据绑定的一些细节
- 3分钟短文 | Laravel 查询结果检查是不是空,5个方法你别用错!
- 使用XtraBackup备份MySQL 8.0 Part 7 对增量备份进行恢复
- 3分钟短文 | Laravel 日志全程记录 SQL 查询语句,要改写底层?
- MySQL InnoDB表空间加密
- 微信小程序自动化测试最佳实践(附 Python 源码)
- 3分钟短文 | MySQL在分组时,把多列合并为一个字段!
- Redis Linux系统参数最佳配置
- 实现Promise其它API
- 使用sysbench进行压测 Part1 sysbench安装
- Java并发编程(07):Fork/Join框架机制详解
- PostgreSQL Pgbouncer 到底怎么使用,疗效有多大
- 微信练手小程序源码 - 日历(含各种功能组件)