python基礎之程序協程
阿新 • • 發佈:2018-11-19
在編寫程序時,一般先測試單程序程式碼,待程式驗證成功後再將其改為多程序,多程序每個程序各用一套獨立的記憶體空間。
使用繼承類的方式建立程序:
from multiprocessing import Process import time import random import os class myproc(Process): def __init__(self,name): super().__init__() self.name=name def run(self): print("%s start"%self.name,os.getpid()) time.sleep(random.randint(1,3)) print("%s end"%self.name,os.getpid()) if __name__=="__main__": p1=myproc('test') p1.start() print("主程序",os.getpid()) p1.join() print("主程序結束")
使用類的例項化方式建立程序:
from multiprocessing import Process import time import random import os def run_proc(name): print("%s start" % name, os.getpid()) time.sleep(random.randint(1, 3)) print("%s end" % name, os.getpid()) if __name__=="__main__": p=Process(target=run_proc,args=('test',))#例項化 p.start() print("主程序",os.getpid()) p.join() print("主程序結束")
協程是多工的順序執行,只有當前任務掛起後,才會切換到其他任務類執行;與執行緒相比,執行緒是CPU輪訓的方式執行:
import asyncio async def func(x):#定義攜程處理函式 print("任務:",x) return '任務:{}的返回結果'.format(x) def callback(future):# print('Callback:',future.result()) coroutine=func('爬取當天股票')#定義協程任務物件 loop=asyncio.get_event_loop()#獲得事件迴圈物件 task=asyncio.ensure_future(coroutine)#獲得任務物件 task.add_done_callback(callback)#封裝好後的協程物件就可以繫結回撥函式 loop.run_until_complete(task)#執行協程任務