-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 を使用している場合、一度に 1 つのスレッドしか 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 に答える