# -*- 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
"""

  

最新文章

  1. C++中重定义的问题——问题的实质是声明和定义的关系以及分离式编译的原理
  2. Microsoft IoT Starter Kit 开发初体验
  3. Tomcat调试笔记
  4. [UCSD白板题] Least Common Multiple
  5. docker数据拷贝
  6. VB 中ListView 某一列的颜色添加不上去的解决方法
  7. JS document 获取 html对象的问题
  8. &ldquo;.Net 社区大会&rdquo;(dotnetConf) 2017 Day 1 Keynote: .NET Everywhere
  9. IIS加载JSON文件 错误 404
  10. CSS相关
  11. Media Player Classic - HC 源代码分析 4:核心类 (CMainFrame)(3)
  12. VICA 架构设计
  13. 基于MPI的大规模矩阵乘法问题
  14. LVS-Keepalived高可用集群(DR)
  15. 力扣(LeetCode)804. 唯一摩尔斯密码词
  16. 1.viewpager
  17. Spark Gradient-boosted trees (GBTs)梯度提升树
  18. office2016word 每次打开都有进度条问题 解决方式
  19. HttpWebRequest、HttpWebResponse、HttpClient、WebClient等http网络访问类的使用示例汇总
  20. MySql--学习成长过程

热门文章

  1. XAF导航系统介绍
  2. WebGIS小理论(持续更新)
  3. Hadoop HA 架构
  4. oracle表空间相关统计查询
  5. 《Web Development with Go》写一个简单的LoggingMiddleware
  6. 201871010116-祁英红《面向对象程序设计(java)》第十三周学习总结
  7. C++ 拷贝构造函数 copy ctor &amp; 拷贝赋值函数 copy op=
  8. a迭代中的燃尽图统计
  9. 用CSS绘制实体三角形
  10. 使用 Hbuilder 连接手机调试移动端项目