进程
概念:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
from multiprocessing import Process
from random import randint
from time import time, sleep
def do_housework(housework):
print('开始%s...' % housework)
cost_time = randint(1, 3)
sleep(cost_time)
print('%s完成! 耗费了%d小时' % (housework, cost_time))
def main():
start = time()
pro1 = Process(target=do_housework, args=('扫地',))
pro1.start()
pro2 = Process(target=do_housework, args=('煮饭',))
pro2.start()
pro1.join() # 进程结束后,才能往下进行
pro2.join()
end = time()
print('总共耗费了%.2f小时.' % (end - start))
if __name__ == '__main__':
main()
# 开始煮饭...
# 开始扫地...
# 煮饭完成! 耗费了3小时
# 扫地完成! 耗费了3小时
# 总共耗费了3.14小时.
# Process finished with exit code 0
线程
一个进程中可包含若干个线程,当然一个进程中至少有一个线程。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的程度。
from random import randint
from threading import Thread
from time import time, sleep
def do_housework(housework):
print('开始%s...' % housework)
cost_time = randint(1, 3)
sleep(cost_time)
print('%s完成! 耗费了%d小时' % (housework, cost_time))
def main():
start = time()
thr1 = Thread(target=do_housework, args=('扫地',))
thr1.start()
thr2 = Thread(target=do_housework, args=('煮饭',))
thr2.start()
thr1.join()
thr2.join()
end = time()
print('总共耗费了%.2f小时.' % (end - start))
if __name__ == '__main__':
main()
# 开始扫地...
# 开始煮饭...
# 煮饭完成! 耗费了1小时
# 扫地完成! 耗费了3小时
# 总共耗费了3.00小时.
# Process finished with exit code 0
以下没有使用线程和进程的代码:
from random import randint
from time import time, sleep
def do_housework(housework):
print('开始%s...' % housework)
cost_time = randint(1, 3)
sleep(cost_time)
print('%s完成! 耗费了%d小时' % (housework, cost_time))
def main():
start = time()
do_housework('扫地')
do_housework('做饭')
end = time()
print('总共耗费了%.2f小时.' % (end - start))
if __name__ == '__main__':
main()
# 开始扫地...
# 扫地完成! 耗费了3小时
# 开始煮饭...
# 煮饭完成! 耗费了1小时
# 总共耗费了4.00小时.
# Process finished with exit code 0