1 분 소요

Python Thread (threading, multiprocessing)

none.py

import time

def heavy_work(name):
    result = 0
    for i in range(4000000):
        result += i
    print('%s done' % name)

start = time.time()

for i in range(4):
    heavy_work(i)

end = time.time()

print("수행시간: %f 초" % (end - start))
0 done
1 done
2 done
3 done
수행시간: 0.600464 초

thread.py

import time

def heavy_work(name):
    result = 0
    for i in range(4000000):
        result += i
    print('%s done' % name)

if __name__ == '__main__':
    import threading

    start = time.time()
    threads = []
    for i in range(4):
        t = threading.Thread(target=heavy_work, args=(i, ))
        t.start()
        threads.append(t)

    for t in threads:
        t.join()  # 스레드가 종료될 때까지 대기

    end = time.time()

    print("수행시간: %f 초" % (end - start))
0 done
1 done
2 done
3 done
수행시간: 0.600464 초

multiprocess.py

import time

def heavy_work(name):
    result = 0
    for i in range(4000000):
        result += i
    print('%s done' % name)

if __name__ == '__main__':
    import multiprocessing

    start = time.time()
    procs = []
    for i in range(4):
        p = multiprocessing.Process(target=heavy_work, args=(i, ))
        p.start()
        procs.append(p)

    for p in procs:
        p.join()  # 프로세스가 모두 종료될 때까지 대기

    end = time.time()

    print("수행시간: %f 초" % (end - start))
0 done
1 done
2 done
3 done
수행시간: 0.257215 초

multipool.py

import time

def heavy_work(name):
    result = 0
    for i in range(4000000):
        result += i
    print('%s done' % name)

if __name__ == '__main__':
    import multiprocessing

    start = time.time()
    pool = multiprocessing.Pool(processes=4)
    pool.map(heavy_work, range(4))
    pool.close()
    pool.join()

    end = time.time()

    print("수행시간: %f 초" % (end - start))
2 done
0 done
1 done
3 done
수행시간: 0.268522 초

댓글남기기