# -*- 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. 高强度学习训练第十四天总结:HashMap

    HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一. JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap ...

  2. PostgreSQL 中字段类型varchar

    PostgreSql数据库中varchar类型与sql server中字段用法有差别,PostgreSql中如果字段设置为varchar类型长度为10,则无论存字母.数字或其它符号,长度最大为10个, ...

  3. FCC---Use the CSS Transform scale Property to Scale an Element on Hover

    The transform property has a variety of functions that let you scale, move, rotate, skew, etc., your ...

  4. vue.js+THREE.js演示服务端3D模型流程总结

    three.js官网 ·场景搭建 使用npm或者其他获取安装three,就像npm i three,之后在需要演示模型的vue组件内import * as THREE from 'three',此时我 ...

  5. jQuery学习笔记Fisrt Day

    跳过JS直接JQUERY,“不愧是你”. 对就是我. 今天开始jQuery学习第一天. click事件方法: 鼠标点击 dbl事件方法: 双击鼠标 mouseenter事件方法: 鼠标进入 mouse ...

  6. [转]JS将图片转为base64编码

    本文转自:https://blog.csdn.net/DeMonliuhui/article/details/79731359 1.根据img标签获取base64编码/** * * @param im ...

  7. iOS 为何使用runtime方法交换多次后却能按照交换顺序依次执行代码逻辑?

    题目: 假设我们有一个ViewController, Category A(ViewController), Category B(ViewController), Category C(ViewCo ...

  8. CSAPP 2-2 整数的表示和运算

    目录 1 整数表示 1 整数表示 编码整数有2种方式: 一种只能表示非负数(大于0的数), 另一种能够表示负数.零和正数. (1) 整型数据类型: C和C++都支持有符号(默认)和无符号数, Java ...

  9. 微信小程序开发——上传代码片段到git仓库

    微信开发者工具除了自带的git版本管理(本地服务)之外,还可以推送到在线git仓库中去,这样别人也可以通过git来拉取你的代码片段或小程序. 一.1.登录git 一.2.点击创建项目  一.3.填写项 ...

  10. android-ramdisk.img分析、recovery.img&boot.img执行过程【转】

    一.ramdisk介绍 ramdisk通过直面意思就大概能理解意思,ram disk虚拟内存盘,将ram模拟成硬盘来使用的文件系统.对于传统的磁盘文件系统来说,这样做的好处是可以极大提高文件访问速度: ...