首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么Python中的共享值会创建额外的进程

为什么Python中的共享值会创建额外的进程
EN

Stack Overflow用户
提问于 2018-07-06 05:42:57
回答 1查看 62关注 0票数 2

通常,当我生成新进程时,我将只有一个进程中的python代码。但是当我使用共享内存(共享值)时,Python将在我自己的进程之外创建另一个新进程。

样本(显示一个过程):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p = multiprocessing.Process(target=mytarget)
p.daemon = True
p.start()

示例(显示两个进程,而我只生成了一个进程):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shared = Manager().Value(int, 0)
p = multiprocessing.Process(target=mytarget, args=(shared))
p.daemon = True
p.start()

有没有办法避免在Python中创建新的额外进程?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-06 05:54:36

根据multiprocessing.Manager文档,调用Manager()会创建单独的服务器进程,负责管理该管理器中共享的对象。这就是你能看到的额外的过程。

我没有仔细阅读文档,但是您可以尝试使用共享内存的替代方式,如共享ctype对象 (如multiprocessing.Valuemultiprocessing.Array )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51211769

复制
相关文章
Python 进程的创建 - multiprocessing
multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情
Devops海洋的渔夫
2019/05/31
9250
subprocess:Python中创建子进程
subprocess库提供了一个API创建子进程并与之通信。这对于运行生产或消费文本的程序尤其有好处,因为这个API支持通过新进行的标准输入和输出通道来回传数据。
luckpunk
2023/09/29
5490
subprocess:Python中创建子进程
python 多进程 数据共享 进程池
1\ multiprocessing.Manager() 数据共享,mgr.dict() import multiprocessing
用户5760343
2022/05/13
7800
Python中相同的值在内存中到底会保存几份
Python采用基于值的内存管理模式,相同的值在内存中只有一份。这是很多Python教程上都会提到的一句话,但实际情况要复杂的多。什么才是值?什么样的值才会在内存中只保存一份?这是个非常复杂的问题。
Python小屋屋主
2018/04/16
1.6K0
Python中相同的值在内存中到底会保存几份
day39(多进程) - 管道、进程池、进程池的返回值、进程回调函数、进程之间的数据共享
# apply_async(func[, args[, kwds[, callback]]]) 它是非阻塞
少年包青菜
2019/08/01
1.9K0
python中进程的几种创建方式
multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结束:
Python学习者
2023/07/06
2700
python多进程通信、共享变量
由于计算机的CPU是单核的,所以一次只能执行一个任务。 但是现代计算机通常都有多个核心,如果只有一个进程在运行,那么其他核心就处于闲置状态。 多进程编程可以同时利用多个核心,提高程序的运行效率。
Michael阿明
2023/03/11
1.7K0
Python中的多进程
Unix和Linux操作系统上提供了fork()系统调用来创建进程,调用fork()函数的是父进程,创建出的是子进程,子进程是父进程的一个拷贝,但是子进程拥有自己的PID。fork()函数非常特殊它会返回两次,父进程中可以通过fork()函数的返回值得到子进程的PID,而子进程中的返回值永远都是0。Python的os模块提供了fork()函数。由于Windows系统没有fork()调用,因此要实现跨平台的多进程编程,可以使用multiprocessing模块的Process类来创建子进程,而且该模块还提供了更高级的封装,例如批量启动进程的进程池(Pool)、用于进程间通信的队列(Queue)和管道(Pipe)等。
用户8442333
2021/05/19
6620
善用tempfile库创建python进程中的临时文件
临时文件在python项目中时常会被使用到,其作用在于随机化的创建不重名的文件,路径一般都是放在Linux系统下的/tmp目录。如果项目中并不需要持久化的存储一个文件,就可以采用临时文件的形式进行存储和读取,在使用之后可以自行决定是删除还是保留。
DechinPhy
2021/05/21
1.3K0
node中创建服务进程
背景 在node工程部署中,常常涉及到三方:本地客户端、跳板机和服务器(集群)。在通过git触发gitlab hook脚本后,需要在跳板机中执行相应的ssh命令执行shell文件启动node服务器,这需要使用一个常用的命令setsid,这样当ssh命令执行完毕shell退出后,node服务器仍正常运行,此时node服务进程就是一个最典型的daemon进程(后台服务进程)。 那么,在node项目中,如何创建一个daemon进程呢?最简单的方式,其实就是采用类似上文中介绍的方式: require('child_
欲休
2018/03/15
1.7K0
Python进程间通信之共享内存
前一篇博客说了怎样通过命名管道实现进程间通信,但是要在windows是使用命名管道,需要使用python调研windows api,太麻烦,于是想到是不是可以通过共享内存的方式来实现。查了一下,Python中可以使用mmap模块来实现这一功能。 Python中的mmap模块是通过映射同一个普通文件实现共享内存的。文件被映射到进程地址空间后,进程可以像访问内存一样对文件进行访问。 不过,mmap在linux和windows上的API有些许的不一样,具体细节可以查看mmap的文档。 下面看一个例子: serve
kongxx
2018/05/14
2.8K0
Python | 面试必问,线程与进程的区别,Python中如何创建多线程?
其实关于元类还有很多种用法,比如说如何在元类当中设置参数啦,以及一些规约的用法等等。只不过这些用法比较小众,使用频率非常低,所以我们不过多阐述了,可以在用到的时候再去详细了解。我想只要大家理解了元类的原理以及使用方法,再去学习那些具体的用法应该会很容易。所以我们今天开始了一个新的话题——多线程和并发。
TechFlow-承志
2020/07/02
1.1K0
Python程序中创建子进程时对环境变量的要求
首先,来看下面一段代码,在主进程中重新为os.environ赋值,但在子进程中并不会起作用,子进程中使用的仍是系统的全部环境变量。
Python小屋屋主
2021/07/19
2.4K0
Python 多进程 多线程数据共享
#!/usr/bin/env python # -*- coding:utf-8 -*- # author: Changhua Gong from multiprocessing import Process, Queue import os, time, random ''' 1. 我们平时from queue import Queue是线程对列,用于数据共享的,只能在线程之间进行使用; 2. from multiprocessing import Queue,是进程对列,用于进程间数据交换,实际中是在进
py3study
2020/01/09
8210
UNIX(进程间通信):12 揭秘mmap创建共享内存
unix访问文件的传统方法使用open打开他们,如果有多个进程访问一个文件,则每一个进程在再记得地址空间都包含有该文件的副本,这不必要地浪费了存储空间。下面说明了两个进程同时读一个文件的同一页的情形,系统要将该页从磁盘读到高速缓冲区中,每个进程再执行一个内存期内的复制操作将数据从高速缓冲区读到自己的地址空间。
用户3479834
2021/03/04
1.7K0
UNIX(进程间通信):12  揭秘mmap创建共享内存
Python学习—pyhton中的进程
进程: 进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据、进程控制块(pcb)三部分组成。 (1)我们编写的程序用来描述进程要完成哪些功能以及如何完成; (2)数据则是程序在执行过程中所需要使用的资源; (3)进程控制块用来记录进程的所有信息。系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。
py3study
2020/01/06
5410
分析运行中的 Python 进程
在 Java 中打印当前线程的方法栈,可以用 kill -3 命令向 JVM 发送一个 OS 信号,JVM 捕捉以后会自动 dump 出来;当然,也可以直接使用 jstack 工具完成,这些方法好几年前我在这篇性能分析的文章中介绍过。这样的需求可以说很常见,比如定位死锁,定位一个不工作的线程到底卡在哪里,或者定位为什么 CPU 居高不下等等问题。
四火
2022/07/19
8640
python中的多进程运用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
云雀叫了一整天
2019/09/29
5180
python中的多进程处理
  众所周知,python本身是单线程的,python中的线程处理是由python解释器分配时间片的;但在python 3.0中吸收了开源模块,开始支持系统原生的进程处理——multiprocessing. 注意:这个模块的某些函数需要操作系统的支持,例如,multiprocessing.synchronize模块在某些平台上引入时会激发一个ImportError 1)Process   要创建一个Process是很简单的。
py3study
2020/01/13
7070
点击加载更多

相似问题

共享在进程中创建的队列- Python多处理

13

为什么python中的子进程数会影响子进程的内存消耗?

11

为什么在进程启动期间创建额外的工作线程?

10

Google服务会增加额外的进程,并导致额外的内存消耗。

15

如何在python的多进程中创建嵌套的共享对象?

117
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文