0

私はプログラミングとpython 3.xの学習の初心者で、約3〜4か月です。

現在、いくつかの「魔方陣」の解を見つけるプログラムを作成しようとしています。

6x6 の魔方陣には 2 億以上の解があることが知られています。

したがって、数字が大きすぎて、必要な通常のPCメモリに保存できません

計算および検出された解を時々ファイルに保存します。

たとえば、解が 1,000,000 になったらファイルに保存したいとします。

要するに、次のように:

if len(resultList) == 1000000:
    file = open('{0}x{0} PMS Solutions {1:03}.txt'.format(ansr, fileNum), 'w')
    file.write(resultList)
    file.close()
    resultList = []

その後、ファイルが作成されている間、新しい解決策を見つけるプロセスは機能しません。

私の質問:

計算と保存の両方のプロセスを同時に機能させる方法はありますか?

4

1 に答える 1

1

python3.3 を使用している場合、目的を達成するためのシンプルでエレガントな方法は、次を使用することですThreadPoolExecutor

def save_to_file(data):
    fname = '{0}x{0} PMS Solutions {1:03}.txt'.format(ansr, fileNum)
    with open(fname, 'w') as fout:
        fout.write(data)   # save the list to file in some way

次のように使用します。

executor = ThreadPoolExecutor(max_workers=2)

# ...

if len(resultList) >= 1000000:
    future = executor.submit(save_to_file, resultList)
    resultList = []

threading3.3 より前のバージョンの Python でモジュールを使用して同じことを行うことができます。

thread = None

if len(resultList) >= 1000000:
    if thread is not None:
        thread.join()  # finish saving the other solutions first
    thread = threading.Thread(target=save_to_file, args=(resultList,))
    thread.start()
    resultList = []
于 2013-07-13T16:38:56.393 に答える