【问题标题】:Wasting cycles with actual arbitrary instructions with Python使用 Python 使用实际的任意指令浪费周期
【发布时间】:2017-02-20 14:22:57
【问题描述】:

我一直在做一个项目,我需要在这个项目中创建一个浪费指令和周期的 Python 应用程序。通常当“循环浪费”意味着等待或睡觉时;但我想以不同的方式来做。即使外部程序循环的迭代周期很高,也应该有一些浪费周期的虚拟指令。

举个例子(典型的做法):

while(True):
    #..do simple thing..
    time.sleep(0.000001)

我想做什么:

while(True):
    #..do complex instructions..
    time.sleep(0.2)

在第一个“典型”示例中,我可以通过简单地调整睡眠时间来实现自定义 CPU 负载,例如 25% 或 100%。我希望能够对第二个代码执行相同的操作,其中句点是一个相当高的值并且是恒定的,但指令是复杂和动态的。

请记住,我必须作为 Python 应用程序而不是作为从 shell 运行的 bash 脚本来执行此操作。

有没有办法做到这一点?任何帮助将不胜感激。

提前致谢。

注意:如果标签有误,我深表歉意。

编辑:使用 Python 2.7

编辑:应用程序要求应该有一个周期性的睡眠,例如time.sleep(2), time.sleep(0.2)。这是我们的一种限制。

【问题讨论】:

  • 这是哪个python版本? 2.7 还是 3.x?
  • 嗨,我在 Linux 上使用 Python 2.7
  • 矩阵乘法是相当消耗cpu的,也许你可以生成两个不同大小的随机矩阵并将它们相乘?
  • 或者,考虑将 wasted-cycles 捐赠给 SETI 或其他公共分布式计算项目

标签: python python-2.7 cpu cpu-usage instructions


【解决方案1】:

没有考虑最好的方法,只是尝试了一些东西,它在我的笔记本电脑 i5 上的 100% CPU。 我选择随机矩阵生成和产品:

def cpu_load():
    import numpy as np
    while True:
    a = np.random.random([1000, 1000])
    b = np.random.random([1000, 1000])
    c = np.mean(a*b)

【讨论】:

  • 你能在下面添加一个time.sleep(0.2),然后再试一次。因为在没有延迟的情况下,显然会是 100%。
  • 我真的不明白你的意思。带睡眠的代码怎么可能达到 100% 的负载?您希望负载是多少?
  • 我不希望它完全达到 100%,但至少可以达到 50%。如果你在不睡觉的情况下打印“你好”,那也将达到 100%。这不是我想要的。
  • 然后我会选择我的解决方案并使用nice,如下所示。无论如何,这听起来确实很奇怪
  • 我会在办公室试一下然后回来。谢谢建议
【解决方案2】:

如果我正确理解您的问题,并在pltrdy 的代码基础上进一步构建,我认为您想要这样的东西:

def cpu_load(treshold):
    import numpy as np
    import time
    start = time.time()
    while time.time() - start < treshold:
        a = np.random.random([1000, 1000])
        b = np.random.random([1000, 1000])
        c = np.mean(a*b)

【讨论】:

  • 我很快就会试试这个。谢谢。
【解决方案3】:

如果您使用的是 Linux 系统,则可以这样做。

import os
os.nice(20)

这将增加流程的便利性。从而减少 CPU 消耗。

Here 是文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多