Multi-threading
Perspective's API is thread-safe, so methods may be called from different
threads without additional consideration for safety/exclusivity/correctness. All
perspective.Client
and perspective.Server
API methods release the GIL, which
can be exploited for parallelism.
Interally, perspective.Server
also dispatches to a thread pool for some
operations, enabling better parallelism and overall better query performance.
This independent threadpool size can be controlled via
perspective.set_num_cpus()
, or the OMP_NUM_THREADS
environment variable.
import perspective
perspective.set_num_cpus(2)
Server handlers
Perspective's server handler implementations each take an optional executor
constructor argument, which (when provided) will configure the handler to
process WebSocket Client
requests on a thread pool.
from concurrent.futures import ThreadPoolExecutor
from tornado.web import Application
from perspective.handlers.tornado import PerspectiveTornadoHandler
from perspective import Server
args = {"perspective_server": Server(), "executor": ThreadPoolExecutor()}
app = Application(
[
(r"/websocket", PerspectiveTornadoHandler, args),
# ...
]
)