背景:来观察测试一下python 进程(process)的阻塞、普通进程和守护进程又有什么区别、进程池又是什么、进程池怎么异步提交任务等等
一、公共代码
首先先贴上一些公共代码,下面的例子都基于这份公共代码运行(注:替换xxx的内容)
importtimeimportmultiprocessingdefworker(name):print('%s: %s start...' % (time.strftime('%X'), name))
time.sleep(2)print('%s: %s done.' % (time.strftime('%X'), name))defxxx():pass
if __name__ == '__main__':
xxx()
二、单进程阻塞
def单进程阻塞():
t= multiprocessing.Process(target=worker, args=('张三',))
t.start()#阻塞
t.join()print('Finished')
运行结果:
解释:阻塞进程的情况下,程序会先等待进程任务执行完,再往下执行其他代码
三、单进程不阻塞
def单进程不阻塞():
t= multiprocessing.Process(target=worker, args=('李四',))
t.start()print('Finished')
运行结果:
解释:不阻塞进程的情况下,程序会直接往下走,进程任务是后完成的(因为我在进程任务里加了 sleep),类似于异步;同时,我们还可以发现,程序执行完最后一行代码之后,如果进程任务还没完成,程序是不会马上死掉的,还是会等进程任务执行完才会结束程序。
四、多进程的错误阻塞
def多进程的错误阻塞():
t1= multiprocessing.Process(target=worker, args=('张三',))
t1.start()
t1.join()
t2= multiprocessing.Process(target=worker, args=('李