浅谈Python 多进程默认不能共享全局变量的问题
主进程与子进程是并发执行的,进程之间默认是不能共享全局变量的(子进程不能改变主进程中全局变量的值)。如果要共享全局变量需要用(multiprocessing.Value("d",10.0),数值)(multiprocessing.Array("i",[1,2,3,4,5]),数组)(multiprocessing.Manager().dict(),字典)(multiprocessing.Manager().list(range(5)))。进程通信(进程之间传递数据)用进程队列(multiprocessing.Queue(),单向通信),管道( multiprocessing.Pipe() ,双向通信)。
import multiprocessing import time import os datalist=['+++'] #全局变量,主进程与子进程是并发执行的,他们不能共享全局变量(子进程不能改变主进程中全局变量的值) def adddata(): global datalist datalist.append(1) datalist.append(2) datalist.append(3) print("子进程",os.getpid(),datalist) if __name__=="__main__": p=multiprocessing.Process(target=adddata,args=()) p.start() p.join() datalist.append("a") datalist.append("b") datalist.append("c") print("主进程",os.getpid(),datalist)
以上这篇浅谈Python 多进程默认不能共享全局变量的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
python实现进程间通信简单实例
本文实例讲解了python实现两个程序之间通信的方法,具体方法如下: 该实例采用socket实现,与socket网络编程不一样的是socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)的第一个参数是socket.AF_UNIX 而不是 socket.AF_INET 例中两个python程序 s.py/c.py 要先运行s.py 基于fedora13/python2.6测试,成功实现! s.py代码如下: #!/usr/bin/env python im
-
Python进程间通信 multiProcessing Queue队列实现详解
一.进程间通信 IPC(Inter-Process Communication) IPC机制:实现进程之间通讯 管道:pipe 基于共享的内存空间 队列:pipe+锁的概念--->queue 二.队列(Queue) 2.1 概念-----multiProcess.Queue 创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递. Queue([maxsize])创建共享的进程队列. 参数 :maxsize是队列中允许的最大项数.如果省略此参数,则无大小限制
-
python执行子进程实现进程间通信的方法
本文实例讲述了python执行子进程实现进程间通信的方法.分享给大家供大家参考.具体实现方法如下: a.py: import subprocess, time subproc = subprocess.Popen(['c:\python31\python.exe', 'c:/b.py'], stdin=subprocess.PIPE, shell=True) time.sleep(0.5) print('start') subproc.stdin.write('data\n') subproc.
-
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
本文实例讲述了Python 进程操作之进程间通过队列共享数据,队列Queue.分享给大家供大家参考,具体如下: 队列中的数据是放在内存中的,可以通过分布式缓存redis优化队列. demo.py(进程通过队列共享数据): import multiprocessing def download_from_web(q): """下载数据""" # 模拟从网上下载的数据 data = [11, 22, 33, 44] # 向队列中写入数据 for te
-
处理python中多线程与多进程中的数据共享问题
之前在写多线程与多进程的时候,因为一般情况下都是各自完成各自的任务,各个子线程或者各个子进程之前并没有太多的联系,如果需要通信的话我会使用队列或者数据库来完成,但是最近我在写一些多线程与多进程的代码时,发现如果它们需要用到共享变量的话,需要有一些注意的地方 多线程之间的共享数据 标准数据类型在线程间共享 看以下代码 #coding:utf-8 import threading def test(name,data): print("in thread {} name is {}".fo
-
python多进程共享变量
本文实例为大家分享了python多进程共享变量的相关代码,供大家参考,具体内容如下 from multiprocessing import Process, Manager import os import time class MulFun(): def __init__(self): self.a = [1,2,3,4,5] self.b = 0 self.c = {} self.s = "hello world" self.radius = Manager().dict() se
-
基于python的多进程共享变量正确打开方式
多进程共享变量和获得结果 由于工程需求,要使用多线程来跑一个程序.但是因为听说python的多线程是假的,于是使用多进程,反正任务需要共享的参数少. 查阅资料,发现实现多进程主要使用Multiprocessing,有两种方式,一种是Process,另一种是Pool. p = Process(target=fun,args=(args)) 再通过p.start()来启动一个子进程,通过p.join()方法来使得子进程运行结束后再执行父进程. 但是这样很烦,还要写个for 循环来开n个线程和join
-
Python 进程之间共享数据(全局变量)的方法
进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的值,主进程跟着改变 if __name__=="__main__": num=multiprocessing.Value("d",10.0) # d表示数值,主进程与子进程共享这个value.(主进程与子进程都是用的同一个value) print(num.value) p=multiprocessing.Proc
-
python多进程实现进程间通信实例
python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包multiprocessing,只需要定义一个函数,Python会完成其他所有事情.借助这个包,可以轻松完成从单进程到并发执行的转换.multiprocessing支持子进程.通信和共享数据.执行不同形式的同步,提供了Process.Queue.Pipe.Lock等组件. multiprocessing.Queue() 以Queue为例,
-
Python进程间通信用法实例
本文实例讲述了Python进程间通信用法.分享给大家供大家参考.具体如下: #!/usr/bin/env python # -*- coding=utf-8 -*- import multiprocessing def counsumer(input_q): while True: item = input_q.get() #处理项目 print item #此处替换为有用的工作 #发出信号通知任务完成 input_q.task_done() def producer(sequence,outp
-
Python进程间通信Queue消息队列用法分析
本文实例讲述了Python进程间通信Queue消息队列用法.分享给大家供大家参考,具体如下: 进程间通信-Queue Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信. 1. Queue的使用 可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个消息列队程序,首先用一个小实例来演示下Queue的工作原理: 代码如下: #coding=utf-8 from multiprocessing import Queue #初始化一个
-
python基于mysql实现的简单队列以及跨进程锁实例详解
通常在我们进行多进程应用开发的过程中,不可避免的会遇到多个进程访问同一个资源(临界资源)的状况,这时候必须通过加一个全局性的锁,来实现资源的同步访问(即:同一时间里只能有一个进程访问资源). 举个例子如下: 假设我们用mysql来实现一个任务队列,实现的过程如下: 1. 在Mysql中创建Job表,用于储存队列任务,如下: create table jobs( id auto_increment not null primary key, message text not null, job_s
随机推荐
- Erlang语法学习笔记:变量、原子、元组、列表、字符串
- 用vbs遍历文件并随机显示的脚本
- Java数据结构之链表(动力节点之Java学院整理)
- Oracle创建Database Link的两种方式详解
- linux XenServer 6.2安装图解教程
- 原生js实现商品放大镜效果
- js动态拼接正则表达式的两种方法
- Android 往Framework中添加新资源的方法详解
- js获取input长度并根据页面宽度设置其大小及居中对齐
- JS从一组数据中找到指定的单条数据的方法
- JS在textarea光标处插入文本的小例子
- 没有SQL Server数据库时如何打开.MDF文件
- java中的静态代码块、构造代码块、构造方法详解
- Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
- 解决表单中第一个非隐藏的元素获得焦点的一个方案
- 微信小程序 实战程序简易新闻的制作
- XP安装过程中的潜在危险
- 快速排序的深入详解以及java实现
- 用DataReader还是DataSet?
- C#调用webservice接口的最新方法教程