'Initialize the XML streams and begin processing events.
The number of threads used for processing stream events is determined
by :data:`HANDLER_THREADS`.
:param bool block: If ``False``, then event dispatcher will run
in a separate thread, allowing for the stream to be
used in the background for another application.
Otherwise, ``process(block=True)`` blocks the current
thread. Defaults to ``False``.
:param bool threaded: **DEPRECATED**
If ``True``, then event dispatcher will run
in a separate thread, allowing for the stream to be
used in the background for another application.
Defaults to ``True``. This does **not** mean that no
threads are used at all if ``threaded=False``.
Regardless of these threading options, these threads will
always exist:
- The event queue processor
- The send queue processor
- The scheduler'

def process(self, **kwargs):

    if ((u'threaded' in kwargs) and (u'block' in kwargs)):
        raise ValueError((u'process()    called    with    both    ' + u'block    and    threaded    arguments'))
    elif (u'block' in kwargs):
        threaded = (not kwargs.get(u'block', False))
    else:
        threaded = kwargs.get(u'threaded', True)
    for t in range(0, HANDLER_THREADS):
        log.debug(u'Starting    HANDLER    THREAD')
        self._start_thread((u'event_thread_%s' % t), self._event_runner)
    self._start_thread(u'send_thread', self._send_thread)
    self._start_thread(u'scheduler_thread', self._scheduler_thread)
    if threaded:
        self._start_thread(u'read_thread', self._process, track=False)
    else:
        self._process()
