'''使用定时器实现当前时间每秒循环输出一次'''
import threading
import time
def run():
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
t = threading.Timer(1, function=run)
t.start()
run()
计时器:
threading.Timer(second,function=)
设置second秒后执行function
例:
'''使用定时器实现当前时间每秒循环输出一次'''
import threading
import time
def run():
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
t=threading.Timer(1,function=run)
t.start()
run()
线程池
1.线程池原理:
新建线程系统需要分配资源,终止线程系统需要回收资源,如果可以重用线程,则可以减去新建/终止的开销
线程池好处:
- 1) 提升性能:因为减去了大量新建、终止线程的开销,重用了线程资源;
- 2) 适用场合:适合处理突发性大量请求或需要大量线程完成任务、但实际任务处理时间短
- 3) 防御功能:能有效避免系统因为创建线程过多,导致系统负荷过大变慢等问题。
- 4) 代码优势:使用线程池的语法比自己新建线程执行线程更加简洁
1.2ThreadPoorExecutor的使用方法
#Executor 执行人
from concurrent.futures import ThreadPoolExecutor
with ThreadPoorExecutor() as poor:
results=pool.map(func_name,urls)
for result in results:
print(result)
from concurrent.future import ThreadPoolExecutor , as_completed
pool = ThreadPoolExecutor()
futures=[poor.submit(craw,url) for url in urls]
for future in futures:
print(future.result())
for future in as_completed(futures):
print(future.result())