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

  

原文地址:https://www.cnblogs.com/sunzebo/p/9588447.html

时间: 2024-10-01 22:53:38

python 归纳 (八)_多进程_基本使用的相关文章

python进阶八_警告和异常

心情有点纠结,怎么说呢,倒不是因为其他学习上的事情,反而是因为生活上狗血的剧情逼着人偏离,渐行渐远,人跟人之间有误会也是正常的,可能是因为交流不够,彼此不够了解吧,希望能尽快度过这一段纠结的日子,简单的生活,慢慢的品味,细细的思考. 最近一段时间,因为需要,借阅了一本Python Cookbook,发现这本书在很多方面介绍的都很不错,比如一些系统管理,web,分布式编程,数据持久化等等这些方面.但是却没有发现详细的关于错误和异常的一些介绍,本着作死的态度打算好好研究一下. 首先,照例,我们先来看

python并发编程之多进程

python并发编程之多进程 一.什么是进程 进程:正在进行的一个过程或者一个任务,执行任务的是CPU. 原理:单核加多道技术 二.进程与程序的区别 进程是指程序的运行过程 需要强调的是:同一个程序执行两次是两个进程,比如打开暴风影音,虽然都是同一个软件,但是一个可以播放苍井空,另一个可以播放武藤兰. 三.并发与并行 无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务. (1)并发

数据挖掘-diabetes数据集分析-糖尿病病情预测_线性回归_最小平方回归

     [python] view plain copy print? # coding: utf-8 # 利用 diabetes数据集来学习线性回归 # diabetes 是一个关于糖尿病的数据集, 该数据集包括442个病人的生理数据及一年以后的病情发展情况. # 数据集中的特征值总共10项, 如下: # 年龄 # 性别 #体质指数 #血压 #s1,s2,s3,s4,s4,s6  (六种血清的化验数据) #但请注意,以上的数据是经过特殊处理, 10个数据中的每个都做了均值中心化处理,然后又用

基本数据类型(字符串_数字_列表_元祖_字典_集合)

基本数据类型(字符串_数字_列表_元祖_字典_集合) 1.字符串 2.数字 除了布尔类型外,int.long.float和complex都可以使用的运算为:加.减.乘.除.整除.幂运算和取余 3.列表和元组 列表的内容可变,可以包含任意对象,使用中括号表示.元组的内容不可变,可以包含任意对象,使用圆括号表示.元组 1 l = [1, 2, 3, '4', '5'] # 列表 2 l = list((1, 2, 3, '4', '5')) 3 4 t = (1, 2, 3, '4', '5') #

Python 3 并发编程多进程之队列(推荐使用)

Python 3 并发编程多进程之队列(推荐使用) 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 可以往队列里放任意类型的数据 创建队列的类(底层就是以管道和锁定的方式实现): 1 Queue([maxsize]):创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递. 参数介绍: 1 maxsize是队列中允许最大项数,省略则无大小限制. 方法介绍: 1.主要

转载--如何使用# ## ... _ _VA_ARGS_ _

作者:hxxiaopei 链接: 如何使用# ## ... _ _VA_ARGS_ _ 1.#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串.例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串.该过程称为字符串化(stringizing).#incldue <stdio.h>#define PSQR(x) printf("the square of" #x "is

60后退休收入将大降 怀揣210万如何让养老不差钱 理财产品 养老 退休_新浪财经_新浪网

文本刊实习生刘昕 私营企业养老金"不给力",退休生活得靠自己."60后"丁先生爱自驾旅行,想换SUV.怀揣210万元存款,退休后如何保持原来的生活水平?掂量着自己的钱袋,丁先生是否该换车呢? 国内延迟退休方案悬而未决,但作为"60后"的丁先生,恐怕无论如何也会摊上"被延迟"这档事儿.以丁先生的实际情况,他退休后的收入会明显缩水,如此算来延迟退休好像也是不错的选择.然而,既然怀着一颗想远行的心,工作似乎就成了羁绊.丁先生希望退休

80后女孩买房三步走 短期增值是首步 资金 增值 理财_新浪财经_新浪网

三湘华声全媒体记者 梁兴 通讯员 王茜 [个案资料] 尹婵,今年28岁,是长沙一名普通的公司职员.步入社会5年以来,月收入一直在4500元左右,但因勤俭节约,月结余能达到3000元,年终奖5000元.目前有存款18万元,有"五险一金",无任何商业保险. 尹婵是土生土长的长沙姑娘,父母工资收入稳定.由于工作后仍和父母一起居住,不需要承担房租或房贷.虽然父母乐意提供食宿,但是尹婵不想做"啃老族",每月给父母800元"搭伙费". [财务诊断] 尹婵工作

三口之家2014年买房理财规划:组合贷缓月供压力 理财资讯 财富故事 理财案例_新浪财经_新浪网

投资与理财记者 吴辉 春暖花开时,江苏常州的读者陈芊芊致信<投资与理财>,诉说她的买房计划.她纠结于要不要现在买房,担心买房后,生活压力变大,影响了现在的生活质量,并希望我们的理财师能给她一些建议,告诉她怎样的理财规划更为合理? 芊芊今年32岁了,目前在一个集团公司上班,税后年收入55000元,年底其他收入29000元,有社保和公积金.但公积金每月交的钱只有300元,而且存款才一年.老公税后年收入60000元,无社保,无公积金,也没有任何商业保险.年底时,老公会交给她3 0 0 0 0元存款.