Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >奇怪的多进程块导入Numba函数

环境

  • GNU/Linux (Fedora 25)。
  • Conda environment.
  • Python 3.6.1.
  • Numba 0.33.0 (np112py36_0).

初始设置(工作正常)

两个文件main.pynumbamodule.py

main.py

这将产生2个进程来运行execute_numba函数。

代码语言:javascript
运行
AI代码解释
复制
import time
from importlib import import_module
from multiprocessing import Process


def execute_numba(name):
    # Import the function
    importfunction = 'numbamodule.numba_function'
    module = import_module(importfunction.split('.')[0])
    function = getattr(module, importfunction.split('.')[-1])
    while True:
        print(str(name) + ' - executing Numba function...')
        # Execute the function
        function(10)
        time.sleep(0.1)


if __name__ == '__main__':
    processes = [Process(target=execute_numba, args=(i,)) for i in range(2)]
    [p.start() for p in processes]
    time.sleep(1)
    [p.terminate() for p in processes]

numbamodule.py

它定义了一个简单的函数numba_function

代码语言:javascript
运行
AI代码解释
复制
import numba


@numba.jit()
def numba_function(x):
    total = 0
    for i in range(x):
        total += i
    return total

我可以运行main.py脚本,并看到两个进程都在打印:

代码语言:javascript
运行
AI代码解释
复制
$ python main.py
0 - executing Numba function...
1 - executing Numba function...
0 - executing Numba function...
1 - executing Numba function...
0 - executing Numba function...
1 - executing Numba function...
[...]

打破它

我打破它的方式有点奇怪,但这是我在试图最小化可重现的测试用例时偶然发现的。请告诉我,你是否也能重现同样的行为。

main.py中,我只需在最后一个Process导入之后添加一个建议的(如下所示)导入(即:取消一行注释并尝试):

代码语言:javascript
运行
AI代码解释
复制
import time
from importlib import import_module
from multiprocessing import Process

#
# Adding one of the import lines bellow results in a block...
# (you may need to install the packages first in the virtual environment)
#
#import matplotlib
#import Pyro4
#import scipy
#import dill


def execute_numba(name):
# [...]

则一个进程可能在execute_numba函数处阻塞(特别是在import_module()调用处):

代码语言:javascript
运行
AI代码解释
复制
$ python main.py 
1 - executing Numba function...
1 - executing Numba function...
1 - executing Numba function...
1 - executing Numba function...
1 - executing Numba function...
1 - executing Numba function...
[...]

对我来说,matplotlibPyro4导入“工作”最好。我甚至不能让区块100%的跑动...:-/

请注意,我只是添加了一个导入行,而不是实际使用的包。其他一些外部导入也会导致块,但我发现上面提出的那些“工作”最好(块最多)。

这是怎么回事?

首先,你能重现同样的行为吗?(对非虚拟化GNU/Linux机器特别感兴趣)

我不知道如何调试它,也不知道为什么会发生这种情况。有什么想法吗?

事实上,添加一个随机的import xxx触发了这个块,这让我感到害怕,对我来说意义不大。这是否依赖于时间/延迟,这就是为什么一些导入会破坏它,而另一些则不会。

备注

  • 如果我从numbamodule.py中删除了import numba@numba.jit,那么它总是可以工作的,所以也许它和Numba有关?

  • 我也可以在更老的Numba/Python版本中重现同样的行为。尝试使用Numba 0.25.0和0.22.1 (都使用Python3.5.3)。

更新

  • 2017-07-03:只是为了说明一下,我并不是在寻找解决方法(我已经在真实的代码中找到了一个)。我真的很想知道在这样的情况下如何处理。了解发生了什么,并学习如何调试和发现问题,以便在损坏的包/构建/环境中报告问题。您将如何proceed?
  • 2017-07-10:数据块,尤其是在import_module() call.
  • 2017-07-11:Numba issue acknowledged.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-13 21:02:56

这似乎是一个Numba bug,在issue 2431中得到了承认。

现在好像已经修好了。如果遇到这种情况,请更新您的numballvmlite安装。如果这不能解决问题,您可能应该在该问题中添加注释以重新打开它。

@stuartarchibald评论道:

...看起来有一个进程被阻塞是因为它实际上有分段故障...从这个位置出现的段错误几乎总是由于线程在LLVM中执行并发操作,或者在Numba初始化序列期间安装函数的一些问题造成的。..。无法再使用llvmlite==0.22.0dev0numba==0.37.0.dev进行复制...

票数 1
EN

Stack Overflow用户

发布于 2017-07-08 10:50:51

这只适用于matplotlib调试,实际上是猜测,但可能会帮助您缩小问题的范围。

当包含matplotlib时,您可以使用以下命令启动程序:

代码语言:javascript
运行
AI代码解释
复制
python main.py --verbose-helpful

它显示了matplotlib初始化时的调试输出。由于它听起来像是只存在于您的特定系统上的问题,因此matplotlibrc可能存在一些配置问题,其配置方式使其以交互模式启动。

下面是对可用的调试模式的概述:https://matplotlib.org/users/customizing.html

票数 0
EN

Stack Overflow用户

发布于 2017-07-03 08:48:00

下面是Python Docker官方环境的重现。Dockerfile紧随其后(将您的.py文件放在一起)。

代码语言:javascript
运行
AI代码解释
复制
FROM python:3.5

RUN pip install numba matplotlib pyro4

ADD . /opt
WORKDIR /opt

CMD python main.py

然后:

代码语言:javascript
运行
AI代码解释
复制
docker build -t so-44764520 .
docker run --rm -it so-44764520

两者都以相同的方式工作,没有“工作”的导入,matplotlibPyro4,并在main.py中使用它们。

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

https://stackoverflow.com/questions/44764520

复制
相关文章
由主节点配置从节点从而构建集群
主节点 改名字,改为master,hosts 改hadoop的slaves加四个xml slaves是加一个节点就要改一次 从节点 新建hadoop用户,修改权限,赋予权限 ALL =… 改好主机名,按node01 node02……规则 配好ssh,保证可以通信 关防火墙,iptables stop 关selinux 自ssh可以,主对从可以免密ssh 用scp传jdk和hadoop到从节点的tmp目录下 可能会出现权限问题,使用tmp目录则不要紧,文件夹权限问题 配jdk和hadoop的环境变量 新
ZONGLYN
2019/08/08
7920
Jenkins 中的系统,主节点,节点,执行器等概念解释
本篇内容,介绍Jenkins中的系统System,主节点Master,节点Node,代理节点Agent和执行器Executor等概念。
zinyan.com
2023/02/24
1.9K0
Jenkins 中的系统,主节点,节点,执行器等概念解释
Greenplum主节点与数据节点硬件详细信息
$ free -h total used free shared buff/cache available Mem: 125G 6.1G 355M 230M 119G 118G Swap: 15G 0B 15G
小徐
2018/09/20
1.8K0
Greenplum主节点与数据节点硬件详细信息
MPI主节点和子节点master&slaver计算
#include <mpi.h> #define WORKTAG 1 #define DIETAG 2 /* Local functions */ static void master(void); static void slave(void); static unit_of_work_t get_next_work_item(void); static void process_results(unit_result_t result); static unit_result_t do_wor
Pulsar-V
2019/03/12
1.5K0
jquery 元素节点操作 - 创建节点、插入节点、删除节点
前面的篇章对于jquery的元素操作大部分是使用html()的方式来操作,这种直接使用字符串创建的方式也是性能最高的。
Devops海洋的渔夫
2019/05/31
9.2K0
如何在集群里服役新节点、退役旧节点(DataNode)
①准备机器,配置好JDK、hadoop的环境变量,在hdfs-site.xml和yarn-site.xml文件中分别配置NameNode和ResourceManager所在主机名 ②待服役成功后,启动datanode和nodemanager进程即可 ③服役了新的DN节点后,可以执行再平衡的命令,这个命令可以将集群中块进行重新平衡分配,实现负载均衡: ./start-balancer.sh
孙晨c
2020/07/14
8440
js|jq获取兄弟节点,父节点,子节点
08.19自我总结 js|jq获取兄弟节点,父节点,子节点 一.js var parent = test.parentNode; // 父节点 var chils = test.childNodes; // 全部子节点 var first = test.firstChild; // 第一个子节点 var last = test.lastChile; // 最后一个子节点  var previous = test.previousSibling; // 上一个兄弟节点 var next = test.next
小小咸鱼YwY
2019/09/11
15.4K0
如何判断 Oracle RAC 中的 Master 主节点
先来说一下前面发布的文章【Oracle 通过 SQL 语句查看数据库服务器 IP 地址】看着阅读量还不错,故有了这篇更文。
JiekeXu之路
2021/12/15
1.4K0
如何判断 Oracle RAC 中的 Master 主节点
jquery 获取元素(父节点,子节点,兄弟节点)
1、jquery 获取元素(父节点,子节点,兄弟节点) $("#test1").parent(); // 父节点 $("#test1").parents(); // 全部父节点 $("#test1").parents(".mui-content"); $("#test").children(); // 全部子节点 $("#test").children("#test1"); $("#test").contents(); // 返回#test里面的所有内容,包括节点和文本 $("#test").content
biaoblog.cn 个人博客
2022/08/11
5.8K0
php获取所有节点的父节点和子节点
根据子节点获取所有的父节点以及父节点的父节点.. <?php $src = '[{"id":"1","name":"媒体(白名单)","pid":"0"},{"id":"2","name":"党媒公
黄啊码
2020/05/29
6.4K0
如何使用xnLinkFinder发现目标网络中的节点
xnLinkFinder是一款基于Python 3开发的网络节点发现工具,在该工具的帮助下,广大研究人员只需要提供一个目标网络地址,xnLinkFinder就能够发现其中的网络节点。
FB客服
2022/11/14
1.6K0
如何使用xnLinkFinder发现目标网络中的节点
区块链中的全节点与轻量级节点
在加密货币中,任何联接到网络的计算机都被称为节点。在区块链中,存在冗余备份现象。也就是说,假定全部节点都需求保存全网的全部生意等数据信息,必然会呈现一些坏处。例如,假定用户想要为项目开发创立自己的区块链节点,他们不需求参与一同过程,那么数据同步将是一项特别巨大的使命,既需求时间,也需求资源。 全部节点: 在比特币中,有一种节点叫做全节点,不只存储全网的生意数据,还能够完毕相关验证生意,独立完毕与对等节点的联接。也就是说,这类节点在本地坚持了一个无缺的区块链网络,在这个网络上能够进行任何查询、生意验证和广播。由于这种节点的存在,去中心化成为可能,区块链网络更加安全。 永久在线,最重要的是参与发掘,找到最长的规则链,辨认分叉。 轻量级节点 在区块链网络中,merkle-tree保存当时块中全部事务的根哈希,它存储在块头中。事务内容的任何改动都将改动根散列,然后改动区块链结构而且不被节点辨认。轻量级节点不需求保存全部事务内容。运用merkle树的特性,只需求包括块头和与自身相关的生意明细,经过Merkle证明判别生意是否在当时区块链生意列表中。 轻量级节点并不总是在线。与全节点不同,它们只能检测哪个是最长的链,但无法知道是否是最长的合法链,由于轻量级节点无法验证大多数生意的合法性,也无法验证区块链网发布的区块的正确性。
v-longbatuiguang2
2022/05/05
2.4K0
区块链中的全节点与轻量级节点
tron-节点-FullNode节点启动
这种方式最简单,不过一般使用区块链的开发者都需要debug代码,所以一般在部署的时候使用脚本启动。 需要用到的文件,都可以从 java-tron 这个项目中获得。
潇洒
2023/10/23
1.1K0
tron-节点-FullNode节点启动
MySQL 5.7 MGR单主确定主节点方法
MySQL 5.7 MGR单主确定主节点是哪个,我们可以通过成员ID来判断,然后结合read_only参数来确认。
星哥玩云
2022/08/18
6010
XML中节点类型
该 Node 接口是整个文档对象模型的主要数据类型。它表示该文档树中的单个节点。当实现 Node 接口的所有对象公开处理子节点的方法时,不是实现 Node 接口的所有对象都有子节点。例如,Text 节点可能没有子节点,且将子节点添加到这样的节点将导致引发 DOMException。
sr
2018/08/20
1.2K0
XML中节点类型
Redis中Sentinel节点
因为Sentinel节点是一个特殊的Redis节点,所以它有自己的专属API。下面我们详细介绍一下Sentinel节点的API使用。
吉林乌拉
2019/11/06
1.1K0
Redis中Sentinel节点
5. 安装k8s的master节点和worker节点
B站视频地址: 5.1k8s-搭建master节点_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
suveng
2020/02/14
2.1K0
Oracle单节点RAC添加节点
环境:RHEL 6.5 + Oracle 11.2.0.4 单节点RAC 需求:单节点RAC添加新节点
星哥玩云
2022/08/16
2.1K0
tron-节点-轻节点搭建
轻节点,只包含部分数据,节点轻量化,所以叫轻节点,BTC、ETH都支持轻节点功能,在tron网络中轻节点数据,只保留一天的数据,从这一天的数据为起点,同步后续数据。 开发一般使用轻节点来进行开发和调试是比较方便的,全量数据需要很大的磁盘空间。
潇洒
2023/10/20
1K0
tron-节点-轻节点搭建
实验:Oracle单节点RAC添加节点
环境:RHEL 6.5 + Oracle 11.2.0.4 单节点RAC 需求:单节点RAC添加新节点
Alfred Zhao
2019/05/24
4K0

相似问题

如何在amcharts4中更改文本的值/类别颜色?

110

更改文本样式,如颜色、文本样式、大小等。通过更改样式文件来编程

21

用amcharts4破坏样式

10

当输入有文本时更改标签样式

21

在标签中显示文本,如注释

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档