# Concurrent PRAW Instances

By default, PRAW works great when there is a one-to-one mapping between running PRAW processes, and the IP address / user account that you make requests from. In fact, as of version 2.1.0, PRAW has multithreaded support as long as there is a one-to-one mapping between thread and PRAW `Reddit` object instance. That is, in order to be thread safe, each thread needs to have its own `Reddit` instance [1]. In addition to multithreaded rate-limiting support, PRAW 2.1.0 added multiprocess rate limiting support.

[1] | It is undetermined at this time if the same authentication credentials can be used on multiple instances where the modhash is concerned.

## praw-multiprocess

PRAW version 2.1.0 and later install with a program praw-multiprocess. This program provides a request handling server that manages the rate-limiting and caching of any PRAW process which directs requests toward it. Starting praw-multiprocess is as simple as running `praw-multiprocess` from your terminal / command line assuming you installed PRAW properly.

By default praw-multiprocess will listen only on localhost port 10101. You can adjust those settings by passing in `--addr` and `--port` arguments respectively. For instance to have praw-multiprocess listen on all valid addresses on port 65000, execute via: `praw-multiprocess --addr 0.0.0.0 --port 65000`. For a full list of options execute `praw-multiprocess --help`.

## PRAW’s MultiprocessingHandler

In order to interact with a praw-multiprocess server, PRAW needs to be instructed to use the `MultiprocessHandler` rather than the `DefaultHandler`. In your program you need to pass an instance of `MultiprocessHandler` into the `handler` keyword argument when creating the `Reddit` instance. Below is an example to connect to a praw-multiprocess server running with the default arguments:

    import praw
    from praw.handlers import MultiprocessHandler

    handler = MultiprocessHandler()
    r = praw.Reddit(user_agent='a descriptive user-agent', handler=handler)

With this configuration, all network requests made from your program(s) that include the above code will be proxied through the praw-multiprocess server. All requests made through the same praw-multiprocess server will respect reddit’s API rate-limiting rules

If instead, you wish to connect to a praw-multiprocess server running at address `10.0.0.1` port 65000 then you would create the PRAW instance via:

    import praw
    from praw.handlers import MultiprocessHandler

    handler = MultiprocessHandler('10.0.0.1', 65000)
    r = praw.Reddit(user_agent='a descriptive user-agent', handler=handler)

## PRAW Multiprocess Resiliency

With all client/server type programs there is the possibility of network issues or simply a lack of an available server. PRAW’s `MultiprocessHandler` was created to be quite resilient to such issues. PRAW will retry indefinitely to connect to praw-multiprocess server. This means that a praw-multiprocess server can be stopped and restarted without any effect on programs utilizing it.

On the other hand, consecutive network failures where the `MultiprocessHandler` has no issue establishing a connection to a praw-multiprocess server will result in `ClientException` after three failures. Such failures are not expected to occur and if reproducable should be reported.