Skip to content

Commit

Permalink
fix: Pool 资源泄漏 (#59)
Browse files Browse the repository at this point in the history
  • Loading branch information
helsonxiao authored Apr 5, 2024
1 parent 205ae66 commit b28aa56
Showing 1 changed file with 10 additions and 12 deletions.
22 changes: 10 additions & 12 deletions server/judge_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ def __init__(self, run_config, exe_path, max_cpu_time, max_memory, test_case_dir
self._test_case_dir = test_case_dir
self._submission_dir = submission_dir

self._pool = Pool(processes=psutil.cpu_count())
self._test_case_info = self._load_test_case_info()

self._spj_version = spj_version
Expand Down Expand Up @@ -179,18 +178,17 @@ def _judge_one(self, test_case_file_id):
def run(self):
tmp_result = []
result = []
for test_case_file_id, _ in self._test_case_info["test_cases"].items():
tmp_result.append(self._pool.apply_async(_run, (self, test_case_file_id)))
self._pool.close()
self._pool.join()
pool = Pool(processes=psutil.cpu_count())
try:
for test_case_file_id, _ in self._test_case_info["test_cases"].items():
tmp_result.append(pool.apply_async(_run, (self, test_case_file_id)))
except Exception as e:
raise e
finally:
pool.close()
pool.join()
for item in tmp_result:
# exception will be raised, when get() is called
# # http://stackoverflow.com/questions/22094852/how-to-catch-exceptions-in-workers-in-multiprocessing
# http://stackoverflow.com/questions/22094852/how-to-catch-exceptions-in-workers-in-multiprocessing
result.append(item.get())
return result

def __getstate__(self):
# http://stackoverflow.com/questions/25382455/python-notimplementederror-pool-objects-cannot-be-passed-between-processes
self_dict = self.__dict__.copy()
del self_dict["_pool"]
return self_dict

0 comments on commit b28aa56

Please sign in to comment.