1. 程式人生 > >python中的非同步與同步

python中的非同步與同步

非同步:多工,多個任務之間執行沒有先後順序,可以同時執行,執行的先後順序不會有什麼影響,存在的多條執行主線

同步:多工,多個任務之間執行的時候要求有先後順序,必須一個先執行完成之後,另一個才能繼續執行,只有一個主線

阻塞:從呼叫者的角度出發,如果在呼叫的時候,被卡住,不能再繼續向下執行,需要等待,就說是阻塞

非阻塞:從呼叫者的角度出發,如果在呼叫的時候,沒有被卡住,能夠繼續向下執行,無需等待,就說是非阻塞

同步阻塞

非同步非阻塞

from multiprocessing import Pool

import time

import os

def water():

    """燒水

"""

    print("子程序 pid=%d" % os.getpid())

    for i in range(5):

        print("正在燒水中")

        time.sleep(0.5)

    return "水燒開了"

defhandle_water(message):

    """接收燒開水的資訊"""

    print("程序pid=%d 收到了非同步任務的結束資訊: %s" % (os.getpid(), message))

pool = Pool(3)

print("主程序 pid=%d" % os.getpid())

for i in range(3):

    print("打遊戲")

    time.sleep(0.5)

                        # 回撥

pool.apply_async(water,callback=handle_water)  # 非同步新增任務

for i in range(20):

    print("打遊戲")

    time.sleep(0.5)

pool.close()

pool.join()