1. 程式人生 > >python基礎之程序協程

python基礎之程序協程

在編寫程序時,一般先測試單程序程式碼,待程式驗證成功後再將其改為多程序,多程序每個程序各用一套獨立的記憶體空間。

使用繼承類的方式建立程序:

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)#執行協程任務