Skip to content

Commit b8e30d0

Browse files
committed
feat(dispatcher): write payload to file to reduce memory usage
dumping large json payloads was consuming up to 1GB in some cases. write the payload to file before send it to lower memory consumption. in the future we might need to change the API about reporting submission result.
1 parent 90b08fc commit b8e30d0

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

dispatcher/dispatcher.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import pathlib
77
import queue
88
import shutil
9+
import tempfile
910
from datetime import datetime
1011

1112
from runner.submission import SubmissionRunner
@@ -372,16 +373,26 @@ def on_submission_complete(self, submission_id: str):
372373
assert [*submission_result.keys()] == [*range(len(submission_result))]
373374
submission_result = [*submission_result.values()]
374375
# post data
375-
submission_data = {
376-
'tasks': submission_result,
377-
'token': config.SANDBOX_TOKEN
378-
}
379-
self.release(submission_id)
380-
logger().info(f'send to BE [submission_id={submission_id}]')
381-
resp = requests.put(
382-
f'{config.BACKEND_API}/submission/{submission_id}/complete',
383-
json=submission_data,
384-
)
376+
with tempfile.NamedTemporaryFile("w") as tmpf:
377+
submission_data = {
378+
'tasks': submission_result,
379+
'token': config.SANDBOX_TOKEN
380+
}
381+
# write payload to file
382+
json.dump(submission_data, tmpf)
383+
tmpf.flush()
384+
# release resources
385+
del submission_data
386+
self.release(submission_id)
387+
388+
logger().info(f'send to BE [submission_id={submission_id}]')
389+
# open in binary mode as requests needs a binary stream
390+
with open(tmpf.name, "rb") as payload:
391+
resp = requests.put(
392+
f'{config.BACKEND_API}/submission/{submission_id}/complete',
393+
data=payload,
394+
headers={'Content-Type': 'application/json'},
395+
)
385396
logger().debug(f'get BE response: [{resp.status_code}] {resp.text}', )
386397
# clear
387398
if resp.ok:

0 commit comments

Comments
 (0)