首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PyCharm避免SIGKILL

用PyCharm避免SIGKILL
EN

Stack Overflow用户
提问于 2019-03-01 10:55:36
回答 1查看 2.9K关注 0票数 1

我有一个简单的循环,在一些模拟中绘制一些累加值,这需要很长时间来计算。我把它简化为下面的MCVE:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

counter = 0
yvalues = [0]
for k in range(1000):
    for l in range(10_000_000):
        counter += 1 + np.tanh(counter)
        print(k, l, counter)
    yvalues.append(counter)
    plt.plot(yvalues)
    plt.draw()
    fig.canvas.flush_events()

问题是,过了一段时间后,我收到了一个通知:"PyCharm没有响应“,尽管程序仍然在运行,运行得很好。

消息本身并不是问题所在,但是如果您忽略了这个警告并且不按等待,程序就会停止并显示。

代码语言:javascript
复制
Process finished with exit code 137 (interrupted by signal 9: SIGKILL)

(当你按原力退出时,也会发生同样的情况。)

,有人知道为什么会发生这种事吗?如何避免?

这使得不可能运行这一模拟,例如,一夜之间,因为你必须不断地注意这一警告,并按下再次等待。

EN

回答 1

Stack Overflow用户

发布于 2020-03-27 07:22:05

正如@CarlosGonzalez的评论中所提到的,SIGKILL可能是由Linux (内存不足)杀手发送的。如果是这样的话,那么唯一的解决方案就是使用更少的内存,或者获得更多的内存。

考虑到运行MCVE所需的时间,我无法确定使用这么多内存的确切源,但我可以猜测它与counteryvalues无关-- counter最多可达10^10 (1000 * 10_000_000)的数量级,适合64位整数精细(8字节内存),yvalues也可以容纳其中1000位(如果我们假设它是数组,而counter是64位int)。

使用下面的代码,我注意到与其余代码相比,fig.canvas.flush_events()运行得相当慢(试着注释掉它并比较速度,并注意Ctrl/SIGINT如何无法阻止它):

代码语言:javascript
复制
import matplotlib.pyplot as plt

fig = plt.figure()
counter = 0
yvalues = [0]
for k in range(1000):
    counter += 1e7
    yvalues.append(counter)
    plt.plot(yvalues)
    plt.draw()
    print(k)
    fig.canvas.flush_events()  # Potentially problematic?

也许您需要重新考虑是否需要刷新画布事件。

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

https://stackoverflow.com/questions/54943192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档