python学习 同步/异步
【什么是同步】
同步就是协同步调,按预定的先后次序进⾏运⾏。如:你说完,我再说。
"同"字从字⾯上容易理解为⼀起动作。其实不是,"同"字应是指协同、协助、互相配合。
如进程、线程同步,可理解为进程或线程A和B⼀块配合,A执⾏到⼀定程度时要依靠B的某个结果,于是停下来,示意B运⾏;B依⾔执⾏,再将结果给 A;A再继续操作。
【什么是异步】
异步是和同步相对的,异步是指在处理调用这个事务的之后,不会等待这个事务的处理结果,直接处理第二个事务去了,通过状态、通知、回调来通知调用者处理结果。
即我们可以理解为:我打电话的时候只允许和一个人通信,和这个人通信结束之后才允许和另一个人开始。这就是同步。
我们发短信的时候发完可以不去等待,去处理其他事情,当他回复之后我们再去处理,这样就大大解放了我们的时间。这就是异步。
#########同步的使用---多个程序有序执行######### from threading import Thread,Lock from time import sleep class Task1(Thread): def run(self): while True: if lock1.acquire(): print('task1') sleep(0.5) lock2.release() class Task2(Thread): def run(self): while True: if lock2.acquire(): print('task2') sleep(0.5) lock3.release() class Task3(Thread): def run(self): while True: if lock3.acquire(): print('task3') sleep(0.5) lock1.release() #使用Lock创建出的锁默认没有锁上 lock1=Lock() #创建另外一把锁,并且锁上(主线程锁的,只有先解锁了才可继续上锁) lock2=Lock() lock2.acquire() #创建另外一把锁,并且锁上(主线程锁的,只有先解锁了才可继续上锁) lock3=Lock() lock3.acquire() t1=Task1() t2=Task2() t3=Task3() t1.start() t2.start() t3.start() #打印结果 # task1 # task2 # task3 # task1 # task2 # task3 # ... #########异步的实现######### from multiprocessing import Pool from time import sleep import os def work(): print('---进程池中的进程-pid={},ppid={}'.format(os.getpid(),os.getppid())) for i in range(3): print('----{}----'.format(i)) sleep(1) return 'haha' def work1(args): print('callback func pid={}'.format(os.getpid())) print('callback func arg={}'.format(args)) if __name__ == '__main__': pool=Pool(3) pool.apply_async(func=work,callback=work1) #主进程没停,当work1回调了work执行的结果之后,执行work1,然后再继续执行主进程 while True: sleep(1) print('主进程pid={}'.format(os.getpid())) #打印结果 # ---进程池中的进程 - pid = 9268, ppid = 20776 # ----0 - --- # 主进程pid = 20776 # ----1 - --- # 主进程pid = 20776 # ----2 - --- # 主进程pid = 20776 # callback func pid = 20776 # callbacf unc arg = haha # 主进程pid = 20776 # 主进程pid = 20776 # 主进程pid = 20776 # ...
posted on 2019-08-21 23:23 cherry_ning 阅读(341) 评论(0) 收藏 举报
浙公网安备 33010602011771号