summaryrefslogtreecommitdiff
path: root/realtime/rt/rt.py
diff options
context:
space:
mode:
Diffstat (limited to 'realtime/rt/rt.py')
-rw-r--r--realtime/rt/rt.py4
1 files changed, 4 insertions, 0 deletions
diff --git a/realtime/rt/rt.py b/realtime/rt/rt.py
index 6f1fb70f..f8126283 100644
--- a/realtime/rt/rt.py
+++ b/realtime/rt/rt.py
@@ -101,6 +101,8 @@ class RealtimeTranslator:
# ctx -> list of (source, target, alignment)
self.ctx_data = {}
+ # Grammar extractor is not threadsafe
+ self.extractor_sem = threading.Semaphore()
# ctx -> deque of file
self.grammar_files = {}
# ctx -> dict of {sentence: file}
@@ -181,8 +183,10 @@ class RealtimeTranslator:
(fid, grammar_file) = tempfile.mkstemp(dir=self.decoders[ctx_name].tmp, prefix='grammar.')
os.close(fid)
with open(grammar_file, 'w') as output:
+ self.extractor_sem.acquire()
for rule in self.extractor.grammar(sentence, ctx_name):
output.write('{}\n'.format(str(rule)))
+ self.extractor_sem.release()
grammar_files = self.grammar_files[ctx_name]
if len(grammar_files) == self.cache_size:
rm_sent = grammar_files.popleft()