mirror of
https://github.com/wassname/ray.git
synced 2026-07-01 04:16:42 +08:00
[Serve] Fix Flask Request self reference (#12560)
* [Serve] Fix Flask Request self reference * Working flag * Fix
This commit is contained in:
@@ -11,7 +11,10 @@ def build_flask_request(asgi_scope_dict, request_body):
|
||||
happen.
|
||||
"""
|
||||
wsgi_environ = build_wsgi_environ(asgi_scope_dict, request_body)
|
||||
return flask.Request(wsgi_environ)
|
||||
# We set populate_request=False to prevent self reference, which can lead
|
||||
# to objects tracked by python garbage collector and memory growth. See
|
||||
# https://github.com/ray-project/ray/issues/12395.
|
||||
return flask.Request(wsgi_environ, populate_request=False)
|
||||
|
||||
|
||||
def build_wsgi_environ(scope, body):
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import gc
|
||||
|
||||
import numpy as np
|
||||
import requests
|
||||
|
||||
import ray
|
||||
from ray import serve
|
||||
|
||||
|
||||
@@ -35,6 +38,31 @@ def test_np_in_composed_model(serve_instance):
|
||||
assert result.json() == 100.0
|
||||
|
||||
|
||||
def test_backend_worker_memory_growth(serve_instance):
|
||||
# https://github.com/ray-project/ray/issues/12395
|
||||
client = serve_instance
|
||||
|
||||
def gc_unreachable_objects(flask_request):
|
||||
gc.set_debug(gc.DEBUG_SAVEALL)
|
||||
gc.collect()
|
||||
return len(gc.garbage)
|
||||
|
||||
client.create_backend("model", gc_unreachable_objects)
|
||||
client.create_endpoint("model", backend="model", route="/model")
|
||||
|
||||
handle = client.get_handle("model")
|
||||
|
||||
for _ in range(10):
|
||||
result = requests.get("http://127.0.0.1:8000/model")
|
||||
assert result.status_code == 200
|
||||
num_unreachable_objects = result.json()
|
||||
assert num_unreachable_objects == 0
|
||||
|
||||
for _ in range(10):
|
||||
num_unreachable_objects = ray.get(handle.remote())
|
||||
assert num_unreachable_objects == 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
import pytest
|
||||
|
||||
Reference in New Issue
Block a user