Merge pull request #8751 from francoisfreitag/mult-open

Linkcheck: Don’t repeatedly open/close log files
This commit is contained in:
Takeshi KOMIYA 2021-01-24 21:22:47 +09:00 committed by GitHub
commit 2e0d7e539a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -118,10 +118,6 @@ class CheckExternalLinksBuilder(DummyBuilder):
self._redirected = {} # type: Dict[str, Tuple[str, int]] self._redirected = {} # type: Dict[str, Tuple[str, int]]
# set a timeout for non-responding servers # set a timeout for non-responding servers
socket.setdefaulttimeout(5.0) socket.setdefaulttimeout(5.0)
# create output file
open(path.join(self.outdir, 'output.txt'), 'w').close()
# create JSON output file
open(path.join(self.outdir, 'output.json'), 'w').close()
# create queues and worker threads # create queues and worker threads
self.rate_limits = {} # type: Dict[str, RateLimit] self.rate_limits = {} # type: Dict[str, RateLimit]
@ -435,13 +431,11 @@ class CheckExternalLinksBuilder(DummyBuilder):
def write_entry(self, what: str, docname: str, filename: str, line: int, def write_entry(self, what: str, docname: str, filename: str, line: int,
uri: str) -> None: uri: str) -> None:
with open(path.join(self.outdir, 'output.txt'), 'a') as output: self.txt_outfile.write("%s:%s: [%s] %s\n" % (filename, line, what, uri))
output.write("%s:%s: [%s] %s\n" % (filename, line, what, uri))
def write_linkstat(self, data: dict) -> None: def write_linkstat(self, data: dict) -> None:
with open(path.join(self.outdir, 'output.json'), 'a') as output: self.json_outfile.write(json.dumps(data))
output.write(json.dumps(data)) self.json_outfile.write('\n')
output.write('\n')
def finish(self) -> None: def finish(self) -> None:
logger.info('') logger.info('')
@ -452,9 +446,11 @@ class CheckExternalLinksBuilder(DummyBuilder):
n += 1 n += 1
done = 0 done = 0
while done < n: with open(path.join(self.outdir, 'output.txt'), 'w') as self.txt_outfile,\
self.process_result(self.rqueue.get()) open(path.join(self.outdir, 'output.json'), 'w') as self.json_outfile:
done += 1 while done < n:
self.process_result(self.rqueue.get())
done += 1
if self._broken: if self._broken:
self.app.statuscode = 1 self.app.statuscode = 1