在编写进程时,一般先测试单进程代码,待程序验证成功后再将其改为多进程,多进程每个进程各用一套独立的内存空间。
使用继承类的方式创建进程:
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)#执行协程任务