Repository: ross/requests-futures

Issue:
max_workers default value is too low
The default `max_workers` value is **2**, which seems extremely low to be a default. The `concurrent.futures` library itself has much higher defaults for `ThreadPoolExecutor`s at 5 * CPU cores (e.g. a 4 core machine would have 20 threads).

I've seen some libraries that use `requests-futures` naively using the default. I'd like to suggest one of the following:

1. Increase the default to something more beneficial, e.g. **5**
2. Use the standard `concurrent.futures` default value (my preferred solution)

The only problem with option 2 is that in Python 3.3 and 3.4 `max_workers` had no default value for ThreadPoolExecutors and *had* to be specified. This is easy enough to work around by implementing the same method `concurrent.futures` itself [introduced in Python 3.5](https://github.com/python/cpython/blob/3.5/Lib/concurrent/futures/thread.py#L91):

```python
import os

class FuturesSession(Session):

    def __init__(self, executor=None, max_workers=None, session=None,
                 adapter_kwargs=None, *args, **kwargs):
        # ...
        if max_workers is None:
            max_workers = (os.cpu_count() or 1) * 5
```

Would be happy to open a PR for this, but before doing so wanted to open this in case there's a hard requirement for this low default value I'm not aware of. 

Discussion:

Patch:
diff --git a/requests_futures/sessions.py b/requests_futures/sessions.py
index 1ec90da..c159b19 100644
--- a/requests_futures/sessions.py
+++ b/requests_futures/sessions.py
@@ -39,7 +39,7 @@ PICKLE_ERROR = ('Cannot pickle function. Refer to documentation: https://'
 
 class FuturesSession(Session):
 
-    def __init__(self, executor=None, max_workers=2, session=None,
+    def __init__(self, executor=None, max_workers=8, session=None,
                  adapter_kwargs=None, *args, **kwargs):
         """Creates a FuturesSession
 


Test patch:
diff --git a/test_requests_futures.py b/test_requests_futures.py
index e85b699..6cb359f 100644
--- a/test_requests_futures.py
+++ b/test_requests_futures.py
@@ -77,7 +77,7 @@ class RequestsTestCase(TestCase):
         """ Tests the `max_workers` shortcut. """
         from concurrent.futures import ThreadPoolExecutor
         session = FuturesSession()
-        self.assertEqual(session.executor._max_workers, 2)
+        self.assertEqual(session.executor._max_workers, 8)
         session = FuturesSession(max_workers=5)
         self.assertEqual(session.executor._max_workers, 5)
         session = FuturesSession(executor=ThreadPoolExecutor(max_workers=10))