使用线程池写入文件时遇到的问题
##需要的效果是 调用一次线程写一个文件,现在的结果是全部线程结束后一次性写完所有文件,没明白是为什么
from pyquery import PyQuery as pq
import time
import random
from concurrent.futures import ThreadPoolExecutor
def paca():
threadPool = ThreadPoolExecutor(max_workers=5, thread_name_prefix="test2_")
for i in range(1, 20):
com=str(i)
threadPool.submit(pacc, com)
def pacc(com):
time.sleep(random.randint(1,10))
with open("./statics/" + com + ".html", 'w', encoding="utf-8") as f:
print("写文件" + com,("title"))
f.write(('html'))
你怎么判断全部线程结束了 ? 我怀疑 … 问题本身就是错的 …
Futures
在paca()
中设置完time.sleep(random.randint(1,10))
秒才写文件, 所以执行一次写一次可考虑生成器,但这样失去了线程池的意义
效果
你可以检查
future.done()
为True
, 代表已执行完, 再执行下一个.你设置了sleep,代码会存在等待执行的状态。
而且我也运行了你的代码,在我这边是分别写入的,并不是最终一下子写入的。而且输出的信息也是一点一点输出的。。。
还有就是最好使用
with ThreadPoolExecutor as xxx
的方式。