diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..d0060e0 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: python +python: + - "2.7" +script: python run_tests + diff --git a/ner/client.py b/ner/client.py index a532b8d..66010eb 100644 --- a/ner/client.py +++ b/ner/client.py @@ -9,6 +9,7 @@ import json import re +import time import socket from itertools import groupby @@ -123,7 +124,27 @@ def tag_text(self, text): if not isinstance(text, bytes): text = text.encode('utf-8') s.sendall(text) - tagged_text = s.recv(10*len(text)) + + timeout = 2 # Consider making this configurable? + lastResponse = time.time() + tagged_text = '' # Response content will be appended as it is received. + while True: + # If some data has already been received, bail after `timeout` seconds. + if len(tagged_text) > 0 and time.time() - lastResponse > timeout: + break + + # Wait a bit longer if no data has been received, just in case. + elif time.time() - lastResponse > timeout * 2: + break + + data = s.recv(4092) # Retrieve a small chunk of the response. + if data: + tagged_text += data + lastResponse = time.time() + else: # Wait a bit before looking again. + time.sleep(0.1) + + return tagged_text.decode('utf-8')