mirror of
https://github.com/wassname/ray.git
synced 2026-06-27 19:00:36 +08:00
Fix WSL patch (it doesn't fall under "win32") (#9195)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import os
|
||||
import logging
|
||||
from os.path import dirname
|
||||
import platform
|
||||
import sys
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -36,9 +37,13 @@ sys.path.insert(0, thirdparty_files)
|
||||
|
||||
if sys.platform == "win32":
|
||||
import ray.compat # noqa: E402
|
||||
ray.compat.patch_psutil()
|
||||
ray.compat.patch_redis_empty_recv()
|
||||
|
||||
if (platform.system() == "Linux"
|
||||
and "Microsoft".lower() in platform.release().lower()):
|
||||
import ray.compat # noqa: E402
|
||||
ray.compat.patch_psutil()
|
||||
|
||||
# Expose ray ABI symbols which may be dependent by other shared
|
||||
# libraries such as _streaming.so. See BUILD.bazel:_raylet
|
||||
python_shared_lib_suffix = ".so" if sys.platform != "win32" else ".pyd"
|
||||
|
||||
+30
-28
@@ -26,34 +26,36 @@ def patch_redis_empty_recv():
|
||||
|
||||
|
||||
def patch_psutil():
|
||||
if (platform.system() == "Linux"
|
||||
and "Microsoft".lower() in platform.release().lower()):
|
||||
# WSL's /proc/meminfo has an inconsistency where it
|
||||
# nondeterministically omits a space after colons (after "SwapFree:"
|
||||
# in my case).
|
||||
# psutil then splits on spaces and then parses the wrong field,
|
||||
# crashing on the 'int(fields[1])' expression in
|
||||
# psutil._pslinux.virtual_memory().
|
||||
# Workaround: We ensure there is a space following each colon.
|
||||
"""WSL's /proc/meminfo has an inconsistency where it
|
||||
nondeterministically omits a space after colons (after "SwapFree:"
|
||||
in my case).
|
||||
psutil then splits on spaces and then parses the wrong field,
|
||||
crashing on the 'int(fields[1])' expression in
|
||||
psutil._pslinux.virtual_memory().
|
||||
Workaround: We ensure there is a space following each colon.
|
||||
"""
|
||||
assert (platform.system() == "Linux"
|
||||
and "Microsoft".lower() in platform.release().lower())
|
||||
|
||||
try:
|
||||
import psutil._pslinux
|
||||
except ImportError:
|
||||
psutil = None
|
||||
psutil_open_binary = None
|
||||
if psutil:
|
||||
try:
|
||||
import psutil._pslinux
|
||||
except ImportError:
|
||||
psutil = None
|
||||
psutil_open_binary = None
|
||||
if psutil:
|
||||
try:
|
||||
psutil_open_binary = psutil._pslinux.open_binary
|
||||
except AttributeError:
|
||||
pass
|
||||
# Only patch it if it doesn't seem to have been patched already
|
||||
if psutil_open_binary and psutil_open_binary.__name__ == "open_binary":
|
||||
psutil_open_binary = psutil._pslinux.open_binary
|
||||
except AttributeError:
|
||||
pass
|
||||
# Only patch it if it doesn't seem to have been patched already
|
||||
if psutil_open_binary and psutil_open_binary.__name__ == "open_binary":
|
||||
|
||||
def psutil_open_binary_patched(fname, *args, **kwargs):
|
||||
f = psutil_open_binary(fname, *args, **kwargs)
|
||||
if fname == "/proc/meminfo":
|
||||
with f:
|
||||
# Make sure there's a space after colons
|
||||
return io.BytesIO(f.read().replace(b":", b": "))
|
||||
return f
|
||||
def psutil_open_binary_patched(fname, *args, **kwargs):
|
||||
f = psutil_open_binary(fname, *args, **kwargs)
|
||||
if fname == "/proc/meminfo":
|
||||
with f:
|
||||
# Make sure there's a space after colons
|
||||
return io.BytesIO(f.read().replace(b":", b": "))
|
||||
return f
|
||||
|
||||
psutil._pslinux.open_binary = psutil_open_binary_patched
|
||||
psutil._pslinux.open_binary = psutil_open_binary_patched
|
||||
|
||||
Reference in New Issue
Block a user