Thread Worker¶
Threading, locking, and handoff between libev and python
Definitions¶
-
struct ymo_wsgi_worker¶
Data structure which represents a single thread worker.
struct ymo_wsgi_worker { ymo_queue_t queue_in; ymo_queue_t queue_out; ymo_queue_node_t pool_in[YMO_WSGI_WORKER_QUEUE_POOL_SIZE]; ymo_queue_node_t pool_out[YMO_WSGI_WORKER_QUEUE_POOL_SIZE]; /* Callbacks: */ ev_prepare prepare_watcher; ev_check check_watcher; ev_idle idle_watcher; /* Output data is signalled to the evloop using an async watcher: */ ev_async event_out; pthread_mutex_t lock_out; /* Inbound data is signalled using a condition var: */ pthread_mutex_t lock_in; pthread_cond_t ready_in; /* And the thread itself: */ pthread_t thread; size_t id; int running; };
Functions¶
-
ymo_status_t ymo_wsgi_worker_init(struct ev_loop *loop, size_t thread_id, ymo_wsgi_worker_t *worker)¶
Initialize a worker thread.
-
ymo_status_t ymo_wsgi_worker_start(ymo_wsgi_worker_t *worker)¶
Start a worker thread.
-
static inline int ymo_wsgi_worker_lock_in(ymo_wsgi_worker_t *worker)¶
Lock the worker input queue.
-
static inline int ymo_wsgi_worker_unlock_in(ymo_wsgi_worker_t *worker)¶
Unlock the worker input queue.
-
static inline int ymo_wsgi_worker_lock_out(ymo_wsgi_worker_t *worker)¶
Lock the worker output queue.
-
static inline int ymo_wsgi_worker_unlock_out(ymo_wsgi_worker_t *worker)¶
Unlock the worker output queue.
-
ymo_status_t ymo_wsgi_worker_add_exchange(ymo_wsgi_worker_t *worker, ymo_wsgi_exchange_t *exchange)¶
Add an exchange to the workers input queue.
-
ymo_status_t ymo_wsgi_worker_response_body_append(ymo_wsgi_exchange_t *exchange, ymo_bucket_t *body_item, int done)¶
Append body data to the response on in the output queue.
-
ymo_status_t ymo_wsgi_worker_notify(ymo_wsgi_worker_t *worker)¶
Signals across thread boundaries to notify a worker that input data is available for processing.
-
int ymo_wsgi_worker_join(ymo_wsgi_worker_t *worker)¶
Join the worker thread.