-6

我正在运行一个查找所有素数的 python 程序。是否有可能将所有计算机的力量分配给这个单一的任务。通过使用我的处理器拥有的所有 4 个内核?

谢谢!

ps我当然用的是Linux!

我正在使用的代码是:

nextCheck = time.time() + 60
primesFound = 0
while 1:
    if isPrime(toTest):
        open("primeList.txt", "a").write(str(toTest)+"\n")
        primesFound += 1
    toTest += 2

    if (toTest+1) % 1000 == 0:
        if time.time() >= nextCheck:
            print "Average speed: " + str(float(primesFound)/((time.time()-nextCheck)+60)) + "/s"
            primesFound = 0
            nextCheck = time.time() + 60  
4

2 回答 2

2

使用multiprocessing. 如果您使用的是 CPython,一次只有一个线程可以执行 Python 字节码,因此使用线程并没有太大帮助。

例如,如果您可以编写一个简单的函数来测试一个数字,那么您可以使用multiprocessing.Pool对象的map()方法将该函数应用于数字列表。

于 2013-10-26T17:33:27.650 回答
0

您还可以使用 nice 为您的 Python 进程分配更高的优先级:

nice -n -20 python app.py

...这会有所帮助,但不能保证您正在耗尽计算机的所有电源。

对于该代码,您可以尝试的最好方法是:

  1. 不要将数字直接写入输出文件并将它们保存在内存结构中,
  2. 编写一个事件以不一直检查是否需要打印速度统计信息,
  3. 尝试将在函数“isPrime”中执行的操作拆分为几个并发任务,以便将它们作为单独的任务执行。

...但是,我不知道这个应用程序是否值得付出努力。

于 2013-10-26T17:38:29.353 回答