[b0022] python 归纳 (八)_多进程_基本使用
# -*- coding: UTF-8 -*-
"""
测试进程使用 multiprocessing.Process 使用:
1. 准备一个函数<fun>,子进程要执行的代码放这里面
def run_proc(name,l_list)
2. 以函数名、tuple(函数参数1,函数参数2...),创建Process 对象
p = multiprocessing.Process(target=run_proc, args=(str(i),l) )
3. 启动子进程,这时主进程不会阻塞
p.start()
4. 想让主进程阻塞,等待子进程完成,接上执行
p.join() 总结:
1.python 多进程类似java的多线程
2.case 1 说明 执行子进程时 import <module> 会在各个子进程中重新执行
也就是,无法通过 模块.变量 实现进程间数据共享
3.case2,case 3 执行子进程时,调用程序所在空间的变量,能在子进程函数中
执行访问,但是修改值无法传递到外面
也就是,无法通过 调用子进程所在文件的变量实现进程间数据共享
4.case4 不能这样使用变量
5.case5 从进程调用参数,传入可改变对象list,也无法实现进程间数据共享 a.进程间数据共享要靠其他方式 疑问:
进程对象.join() 实现主进程等待子进程结束
如何实现 子进程2 等待 子进程1 结束 """
import os,time
from multiprocessing import Process
import psutil
import test_m # 测试模块 里面只有变量 m=1 c = "c" def run_proc(name,l_list):
print "Child process %s (%s) is running ..." % (name,os.getpid(),)
print "sub process %s" % psutil.Process(os.getpid()).name()
print "list:",l_list
l_list[0] = "a" + name # case 1
print test_m.m
time.sleep(5)
print "%s end" % os.getpid()
test_m.m = 2 # case 2
# global c 加上报错
print c # case 3
global d # 不加报错
print d
d = 'dd' # case 4
print e # pycharm编辑器里不提示红色,运行时报错 d = "d" if __name__ == '__main__':
print 'main process %s.' % os.getpid()
print "main process %s" % psutil.Process(os.getpid()).name() e = "e"
test_m.m = 3
l = ["l1","l2"] for i in range(2):
p = Process(target=run_proc, args=(str(i),l) )
print 'process will start,%s' % os.getpid()
p.start()
print 'flag1 %d' % i
p.join() # 等待进程完成
print 'flag2 %d' % i # case 5
print 'list in main:',l print "main end %s." % os.getpid()
# case 1
print test_m.m """
Out:
main process 7008.
main process python.exe
process will start,7008
flag1 0
Child process 0 (1272) is running ...
sub process python.exe
list: ['l1', 'l2']
1
1272 end
c
d
Process Process-1:
.....省略
NameError: global name 'e' is not defined
flag2 0
list in main: ['l1', 'l2']
process will start,7008
flag1 1
Child process 1 (3216) is running ...
sub process python.exe
list: ['l1', 'l2']
1
Process Process-2:
.....省略
NameError: global name 'e' is not defined
3216 end
c
d
flag2 1
list in main: ['l1', 'l2']
main end 7008.
3
"""
[b0022] python 归纳 (八)_多进程_基本使用的更多相关文章
- Python进阶(4)_进程与线程 (python并发编程之多进程)
一.python并发编程之多进程 1.1 multiprocessing模块介绍 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大 ...
- python基础-基本数据类型总结_整型(int)_字符型(str)_day3
一.基本数据类型 1.整型(int) ps1:数字 int ,所有的功能,都放在int里a1 = 123a1 = 456 ps2: int 将字符串转换为数字 # -int # 将字符串转换为数字 ...
- python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客
python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客 python datetime模块strptime/strptime form ...
- python学习两月总结_汇总大牛们的思想_值得收藏
下面是我汇总的我学习两个月python(version:3.3.2)的所有笔记 你可以访问:http://www.python.org获取更多信息 你也可以访问:http://www.cnblogs. ...
- Python并发编程__多进程
Python并发编程_多进程 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大 ...
- js分析 天_眼_查 字体文件
0. 参考 js分析 猫_眼_电_影 字体文件 @font-face 1. 分析 1.1 定位目标元素 1.2 查看网页源代码 1.3 requests 请求提取得到大量错误信息 对比猫_眼_电_影抓 ...
- Python之多线程和多进程
一.多线程 1.顺序执行单个线程,注意要顺序执行的话,需要用join. #coding=utf-8 from threading import Thread import time def my_co ...
- 『TensorFlow』分布式训练_其三_多机分布式
本节中的代码大量使用『TensorFlow』分布式训练_其一_逻辑梳理中介绍的概念,是成熟的多机分布式训练样例 一.基本概念 Cluster.Job.task概念:三者可以简单的看成是层次关系,tas ...
- day18_文件处理_迭代器_生成器
#!/usr/bin/env python # -*- coding:utf-8 -*- # ********************day18_文件处理_迭代器_生成器 ************** ...
随机推荐
- C#基本语法<三>_WindowsFrom
winform 在windows form开发过程中还是有很多坑需要注意,包括一些重要代码记不得,在这个文件中进行汇总更新. 命名规则 M结尾表示model A结尾表示消息 Object表示 ,底层接 ...
- Promise的使用
Promise的简单认识 Promise 是ES6中对异步编程的一种解决方案,可以避免出现回调地狱 Promise最基本的语法 new Promise((resolve, reject) => ...
- Object-C里的类目,延展,协议
1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. @interface NSMutableArray ( ...
- React Native之React Navigation踩坑
自动重装系统之后,已经很长一段时间没有来写React Native了,今天空闲之余,决定重新配置React Native的开发环境,继续踩坑... React Native的开发环境配置狠简单,只要依 ...
- IDEA使用svn拉取多模块项目
如果没有安装过svn客户端,安装的时候需要选择安装第二个工具,如下图所示 安装小乌龟, 自行搜索, 注意点是需要选择安装第二个工具 因为默认是不安装的, 而这个组件是集成到IDEA ”必须的” . 如 ...
- fstab是什么?被谁用?怎么写?
关键词:fstab.mount -a.fsck等等. 1. fstab是干什么的? fstab是file system table的意思,即文件系统表. 它在开机的时候告诉系统挂载哪些分区.挂载点是什 ...
- Ubuntu笔记本安装高级电源管理工具TLP
Ubuntu系统下的笔记本电脑电量总是下降的很快,尽管目前系统对电源管理的优化已经进步了不少,但还是需要一些工具来辅助. TLP是一款Linux下的高级电源管理工具,相信很多Linux用户会用到它. ...
- Python进阶基础学习(多线程)
Python进阶学习笔记(一) threading模块 threading.thread(target = (函数)) 负责定义子线程对象 threading.enumerate() 负责查看子线程对 ...
- itest(爱测试) 4.2.1 发布,开源BUG 跟踪管理 & 敏捷测试管理软件
itest 入选 2019 年度最受欢迎开源中国软件 开源工具的发展,离不开你我的支持,需要您投上宝贵的一票 去投票 itest 简介:查看简介 itest 开源敏捷测试管理,testOps 践行者 ...
- IPFS入门
相关链接 快速安装 深入浅出 IPFS指令集中文版 IPFS开发入门 filecoin 在线视频 go-ipfs