Skip to content

Commit

Permalink
Merge pull request #57 from Techainer/gevent
Browse files Browse the repository at this point in the history
Handle gevent monkey patch and update pipeline
  • Loading branch information
duonglong289 committed Nov 25, 2022
2 parents a52cf88 + f46da7b commit f8dbda3
Show file tree
Hide file tree
Showing 18 changed files with 284 additions and 760 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
python-version: [3.7, 3.8, 3.9]
python-version: ["3.9"]

if: "!contains(github.event.head_commit.message, 'ci skip')"

Expand Down
33 changes: 22 additions & 11 deletions mlchain/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,23 @@
from os import environ

if "DISABLE_GEVENT_FIX" not in environ:
# Fix gevent
try:
from gevent import monkey
monkey.patch_all(thread=False, socket=False)
except ImportError:
pass

import ssl
try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else:
# Handle target environment that doesn't support HTTPS verification
ssl._create_default_https_context = _create_unverified_https_context

# Mlchain Context
from contextvars import ContextVar
from typing import Any, Dict
Expand All @@ -7,26 +27,17 @@
)

# Parameters of MLchain
__version__ = "0.3.0"
__version__ = "0.3.1"

HOST = "https://www.api.mlchain.ml"
WEB_HOST = HOST
API_ADDRESS = HOST
MODEL_ID = None
import ssl

try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else:
# Handle target environment that doesn't support HTTPS verification
ssl._create_default_https_context = _create_unverified_https_context

from os import environ

environ['OBJC_DISABLE_INITIALIZE_FORK_SAFETY'] = 'YES'

from mlchain.base.log import logger
from .context import mlchain_context

Expand Down
1 change: 0 additions & 1 deletion mlchain/cli/mlconfig.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ gunicorn:
threads: 1 # Number of simultaneous threads in workers
worker_class: gthread # The base worker_class, can use gevent (For better IO) or uvicorn.workers.UvicornWorker (starlette - For Async)
max_requests_jitter: 50 # Restart worker different time
accesslog: mlchain-server.log # Log file for gunicorn

bind:
- 'unix:/tmp/gunicorn.sock' # Using sock to make gunicorn faster
Expand Down
10 changes: 10 additions & 0 deletions mlchain/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@ def load_config(self, path, mode=None):
for k, v in data['mode']['env'][mode].items():
if k in environ:
data['mode']['env'][mode][k] = environ[k]
if isinstance(v, dict):
for sub_k, sub_v in v.items():
env_key = f"{k}___{sub_k}"
if env_key in environ:
data['mode']['env'][mode][k][sub_k] = environ[env_key]
self.update(data['mode']['env'][mode])

def get_client_config(self, name):
Expand Down Expand Up @@ -152,6 +157,11 @@ def load_config(data):
for k, v in data['mode']['env'][mode].items():
if k in environ:
data['mode']['env'][mode][k] = environ[k]
if isinstance(v, dict):
for sub_k, sub_v in v.items():
env_key = f"{k}___{sub_k}"
if env_key in environ:
data['mode']['env'][mode][k][sub_k] = environ[env_key]
mlconfig.update(data['mode']['env'][mode])

if (mlconfig.MLCHAIN_SENTRY_DSN is not None and mlconfig.MLCHAIN_SENTRY_DSN != 'None') and data.get('wrapper', None) != 'gunicorn':
Expand Down
7 changes: 5 additions & 2 deletions mlchain/server/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ def __init__(self, model: ServeModel, name=None, version=None, api_format=None,
self.converter = Converter()

self.initialize_app()
self._swaggered = False

def _check_status(self):
"""
Expand Down Expand Up @@ -113,7 +114,9 @@ def register_swagger(self):
"""
Add Swagger to URL
"""
return self._register_swagger()
if not self._swaggered:
self._register_swagger()
self._swaggered = True

def add_endpoint(self, endpoint=None, endpoint_name=None,
handler=None, methods=['GET', 'POST']):
Expand Down Expand Up @@ -178,7 +181,7 @@ def initialize_endpoint(self):
self._register_home()

try:
self._register_swagger()
self.register_swagger()
except Exception as ex:
logger.error("Can't register swagger with error {0}".format(ex))

Expand Down
7 changes: 2 additions & 5 deletions mlchain/workflows/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
from .background import Background
from .parallel import Parallel
from .task import Task, SyncTask
from .pipeline import Step, Pipeline
from .limiter import RateLimiter, AsyncRateLimiter
from mlchain.workflows_sync import Task as SyncTask
from mlchain.workflows_sync import Background, Parallel, Task, RateLimiter, AsyncRateLimiter
130 changes: 0 additions & 130 deletions mlchain/workflows/background.py

This file was deleted.

Loading

0 comments on commit f8dbda3

Please sign in to comment.