0

dotestsrl および dotestmt 関数が機能し、ファイルの作成と書き込みを行います。dotestmp 関数は高速に実行されますが、ファイルの作成や書き込みは行いません。dotestmp が dotestmt と同じタスクを実行するが、multiprocessing.Process を使用するようにするにはどうすればよいですか? (これは、Windows 7 と Python 3.2.3 を実行しているデュアルコアのハイパースレッド マシン上にあります。それが重要な場合)

import sys, os, datetime, threading, multiprocessing

def dowrk(fp):
    with open(fp, mode="w") as f:
        for i in range(1000000):
            f.write(str(i))

def dotestsrl():
    fp = "C:\\Users\\user1\\Desktop\\"
    fn = "tst.txt"
    start = datetime.datetime.now()
    for fni in range(1, 5):
        dowrk(fp+str(fni)+fn)
    end = datetime.datetime.now()
    print("***DONE at: ", end - start)

def dotestmt():
    fp = "C:\\Users\\user1\\Desktop\\"
    fn = "tst.txt"
    lst = []
    start = datetime.datetime.now()
    for fni in range(1, 5):
        t = threading.Thread(target=dowrk, args=(fp+str(fni)+fn,))
        lst.append(t)
        t.start()
    for te in lst:
        te.join()
    end = datetime.datetime.now()
    print("***DONE at: ", end - start)

def dotestmp():
    fp = "C:\\Users\\user1\\Desktop\\"
    fn = "tst.txt"
    lsp = []
    start = datetime.datetime.now()
    for fni in range(1, 5):
        p = multiprocessing.Process(target=dowrk, args=(fp+str(fni)+fn,))
        lsp.append(p)
        p.start()
    for pe in lsp:
        pe.join()
    end = datetime.datetime.now()
    print("***DONE at: ", end - start)

dotestsrl() # ***DONE at:  0:00:08.029000
dotestmt() # ***DONE at:  0:00:07.697000
dotestmp() #  ***DONE at:  0:00:00.257000, but doesn't actually write files.
4

1 に答える 1

0

あなたは試すことができます:

def dowrk_safe(*args, **kwargs):
    try:
        return dowrk(*args, **kwargs)
    except Exception:
        import sys
        import traceback
        traceback.print_exc(file=sys.stderr)

関数の代わりにdowrk()、エラーがあるかどうかを確認します。

于 2012-08-01T22:48:20.820 に答える