[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_文件处理_迭代器_生成器 ************** ...
随机推荐
- ie11 SCRIPT5011:不能执行已释放Script的代码
依照我遇到的问题为例: (我的页面结构为:父页面中嵌套有iframe子页面) 1.造成这种情况的原因是:父页面初始化声明变量a为数组(数组对象是引用类型,赋值传递的是地址),创建iframe子页面后给 ...
- Cobalt Strike系列教程第三章:菜单栏与视图
通过前两章的学习,我们掌握了Cobalt Strike教程的基础知识,及软件的安装使用. Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...
- 用Docker运行Jenkins自动化构建.NET Core项目
目标 当代码提交到GitHub后,自动生成构建项目并部署到服务器.接下来介绍一下如何在容器中运行Jenkins,并自动化构建GitHub上的项目,使用自动化构建来解放你的双手. 前置条件 一台已经安装 ...
- Scrapy的下载中间件
下载中间件 简介 下载器,无法执行js代码,本身不支持代理 下载中间件用来hooks进Scrapy的request/response处理过程的框架,一个轻量级的底层系统,用来全局修改scrapy的re ...
- 002.SQLServer数据库镜像高可用简介
一 数据库镜像简介 1.1 数据库镜像概述 数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的 SQL Server 数据库引擎服务器实例上. 通常,这些服务器实例驻留在不同位置的计算机上 ...
- 【Autoit】Autoit 使用
一.Autoit 上传文件. 1.常用语法 - WinActivate("title") 聚焦到指定活动窗口 - ControlFocus ( "titl ...
- Cpp 二叉树
#include<vector> #include<iostream> using namespace std; //二叉树的一个节点结构 struct BinaryTreeN ...
- oracle--共享磁盘挂载
01,查看挂载的磁盘 [root@SHLPDBWX01 ~]# fdisk -l Disk /dev/sda: bytes heads, sectors/track, cylinders Units ...
- PHP 构造函数
在PHP5以前的版本中,构造函数的名称必须与类名相同,这种方法在PHP5中仍然可以使用,但现在已经很少有人用了.PHP5以及之后的版本,构造函数用__construct()方法来声明,这样做的好处是可 ...
- python做中学(八)匿名函数lambda的用法
匿名函数,顾名思义即没有名称的函数,和def定义的函数的最大区别在于匿名函数创建后返回函数本身(即匿名函数不需要return来返回值),表达式本身结果就是返回值,而def创建后则赋值给一个变量名,在P ...