import time
import os
import threading
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
deffunc(n):
time.sleep(2)return n*n
defcall_back(m):print('结果为:%s'%(m.result()))
tpool = ThreadPoolExecutor(max_workers=5)
t_lst =[]for i inrange(5):
t = tpool.submit(func,i).add_done_callback(call_back)
回调函数的示例1
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
import requests
import os
defget_page(url):print('<进程%s> get %s'%(os.getpid(),url))
respone=requests.get(url)if respone.status_code ==200:return{'url':url,'text':respone.text}defparse_page(res):
res=res.result()print('<进程%s> parse %s'%(os.getpid(),res['url']))
parse_res='url:<%s> size:[%s]\n'%(res['url'],len(res['text']))withopen('db.txt','a')as f:
f.write(parse_res)if __name__ =='__main__':
urls=['https://www.baidu.com','https://www.python.org','https://www.openstack.org','https://help.github.com/','http://www.sina.com.cn/']
p=ProcessPoolExecutor(3)for url in urls:
p.submit(get_page,url).add_done_callback(parse_page)# concurrent.futures模块中回调函数用add_done_callback()函数
回调函数的示例2
from multiprocessing import Pool
import requests
import os
defget_page(url):print('<进程%s> get %s'%(os.getpid(),url))
respone=requests.get(url)if respone.status_code ==200:return{'url':url,'text':respone.text}defparse_page(res):print('<进程%s> parse %s'%(os.getpid(),res['url']))
parse_res='url:<%s> size:[%s]\n'%(res['url'],len(res['text']))withopen('db.txt','a')as f:
f.write(parse_res)if __name__ =='__main__':
urls=['https://www.baidu.com','https://www.python.org','https://www.openstack.org','https://help.github.com/','http://www.sina.com.cn/']
p=Pool(3)for url in urls:
p.apply_async(get_page,args=(url,),callback=pasrse_page)
p.close()
p.join()# Pool中回调函数apply_async(get_page,args=(url,),callback=pasrse_page)# callback写在里面