WSGI 설정

WSGI를 사용중인 경우 프로세스가 fork된 이후 hackle_client를 초기화 해야 합니다.

uWSGI

# Step 1: uwsgi.ini 설정
enable-threads = True


# Step 2: app.py 설정
from hackle import hackle
from uwsgidecorators import postfork

class HackleClient:
    client = None

    def init(self):
        if self.client is None:
            self.client = hackle.Client(sdk_key='YOUR_SERVER_SDK_KEY')


hackle_client = HackleClient()


# Step 3: post_fork 설정
@postfork
def post_fork(server, worker):
    hackle_client.init()


# Step 4: hackleClient 사용 시
from app import hackle_client

hackle_client.client.variation(...)

gunicorn

# Step 1: app.py 설정
from hackle import hackle

class HackleClient:
    client = None

    def init(self):
        if self.client is None:
            self.client = hackle.Client(sdk_key='YOUR_SERVER_SDK_KEY')


hackle_client = HackleClient()

def post_fork(server, worker):
    hackle_client.init()


# Step 2: gunicorn.conf.py 설정
from app import post_fork

post_fork = post_fork


# Step 3: hackleClient 사용 시
from app import hackle_client

hackle_client.client.variation(...)

gevent 설정

gevent의 몽키패치처럼 내부 통신 방식을 non-blocking 으로 변경하게 되는 경우라면 실제로 호출 시점에 인스턴스가 생성되도록 생성 시점을 지연시켜야 합니다.

# step 1: gevent monkey patch
import gevent.monkey
gevent.monkey.patch_all()

# step 2: app.py wrapper function
from hackle import hackle

def hackle_wrapper():
    if 'client' not in hackle_wrapper.__dict__:
        hackle_wrapper.client = hackle.Client(sdk_key='YOUR_SERVER_SDK_KEY')
    return hackle_wrapper.client

# step 3: hackleClient 사용 시
from app import hackle_wrapper

hackle_wrapper().variation(...)