# -*- 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 归纳 (八)_多进程_基本使用的更多相关文章

  1. Python进阶(4)_进程与线程 (python并发编程之多进程)

    一.python并发编程之多进程 1.1 multiprocessing模块介绍 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大 ...

  2. python基础-基本数据类型总结_整型(int)_字符型(str)_day3

     一.基本数据类型 1.整型(int) ps1:数字 int ,所有的功能,都放在int里a1 = 123a1 = 456 ps2: int 将字符串转换为数字 # -int # 将字符串转换为数字 ...

  3. python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客

    python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客     python datetime模块strptime/strptime form ...

  4. python学习两月总结_汇总大牛们的思想_值得收藏

    下面是我汇总的我学习两个月python(version:3.3.2)的所有笔记 你可以访问:http://www.python.org获取更多信息 你也可以访问:http://www.cnblogs. ...

  5. Python并发编程__多进程

    Python并发编程_多进程 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大 ...

  6. js分析 天_眼_查 字体文件

    0. 参考 js分析 猫_眼_电_影 字体文件 @font-face 1. 分析 1.1 定位目标元素 1.2 查看网页源代码 1.3 requests 请求提取得到大量错误信息 对比猫_眼_电_影抓 ...

  7. Python之多线程和多进程

    一.多线程 1.顺序执行单个线程,注意要顺序执行的话,需要用join. #coding=utf-8 from threading import Thread import time def my_co ...

  8. 『TensorFlow』分布式训练_其三_多机分布式

    本节中的代码大量使用『TensorFlow』分布式训练_其一_逻辑梳理中介绍的概念,是成熟的多机分布式训练样例 一.基本概念 Cluster.Job.task概念:三者可以简单的看成是层次关系,tas ...

  9. day18_文件处理_迭代器_生成器

    #!/usr/bin/env python # -*- coding:utf-8 -*- # ********************day18_文件处理_迭代器_生成器 ************** ...

随机推荐

  1. 2018简约商务工作汇报工作总结公司培训团队介绍PPT模

    这几款ppt模板都是简约大气类型的,32页足够丰富,有完整结构框架,可以修改文字图片直接套用模板,是通用的商务ppt模板. 模版来源:http://ppt.dede58.com/gongzuohuib ...

  2. Andorid Studio 新建模拟器无法联网问题

    1.查看自己本机的dns cmd  -> ipconfing /all 2.修改模拟器的dns 跟PC本机一致.  开启模拟器 -> cmd -> adb root  (需要root ...

  3. 服务器安装neo4j

    neo4j是目前最流行的图形数据库,支持完整的事务.在树形图中,图是有顶点.边和属性组成的,顶点和边都可以设置属性,顶点又称节点,边也叫做关系.每个节点和关系都可以有一个或多个属性,neo4j创建的图 ...

  4. Linux系统学习 二、测评-身份鉴别1

    身份鉴别 1)对登陆操作系统和数据库系统的用户进行身份表示和鉴别 1.密码文件中的口令字段是否不为空 2.检查各个用户主目录下的.rhosts文件 3.查看/etc/hosts.equiv 学习: 1 ...

  5. python redis的连接及相关操作

    1.redis连接.及存取值 import redis r = redis.Redis(host='192.168.2.22',port=6379,db=2,password= 'redis') r. ...

  6. Jenkins实现单一安卓项目打包多个module填坑实录

    今天接手一个任务,已有项目结构上新添加了一个module,这个module打包工作需要在Jenkins上添加一个方便测试点击的打包工程 因为之前已有现成的打包工程,我直接新建了一个工程并且复制原有工程 ...

  7. 003 C/C++ 数据类型_数组

    #include "stdio.h" #include "stdlib.h" //数据类型的本质: 固定大小内存块的别名. void main() { int ...

  8. QT debug执行exe文件 应用程序无法正常启动0xc000007b

    遇到这种错,发现并不是因为缺失dll文件,因为我把需要的DLL都放到Debug文件下了,但还是有这问题: 解决方法: 右键点击-- >我的电脑--属性-->高级系统设置-->环境变量 ...

  9. java图形界面 计算器实现

    编写程序实现一个简单计算器的基本功能,具体可以模仿Windows附件中的计算器或模拟常见的实物计算器. package beizi; import java.awt.EventQueue; impor ...

  10. HTML连载45-浮动元素脱标、排序规则、贴靠现象

    一.浮动元素脱标 1.什么是浮动元素脱标 脱标:脱离标准流. 当某一个元素浮动之后,那么这个元素看上去就像被从标准流中删除了一样 2.浮动元素脱标之后有什么影响 如果前面一个元素浮动了,而后面的一个元 ...