-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improvements to WSGI example #9
Conversation
This makes a big difference. About 81% of the WSGI app's time is currently spent in calls to simplejson.dumps(), which itself takes about 50% more time than just using 'json' from the standard library under CPython 2.7. Since simplejson is an old third-party library that relies on C extensions to get speedups under CPython, it seems fair to replace it with a newer third-party library, otherwise we are crippling what should be Python's performance baseline.
To install ujson, all we need to do is run pip install ujson, correct? |
Yes. |
You can also remove the response variable, and pass the message directly to ujson.dumps() |
You are absolutely right, my reasoning was that I couldn't decide if that was clearer style and quickly measuring there is no real speed difference anyway. I'm after the JSON library and server changes that I can see making a big difference, if other people want to issue further style or 1-2% performance improvement pull requests then that is fine with me. |
What about using gevent wsgi server? |
Improvements to WSGI example
Thanks sashahart! We're still looking into adding gevent workers and some other server side aspects. |
@jerem for the json task it will make no difference because it's CPU-bound |
DSL client java for JSON serialization PostgreSQL
Here's an example of the error output from before this change: Unhandled exception: Bad state: Stream was already listened to #0 _RawServerSocket.listen (dart:io-patch/socket_patch.dart:1106) TechEmpower#1 new _ForwardingStreamSubscription (dart:async/stream_pipe.dart:123) TechEmpower#2 _ForwardingStream._createSubscription (dart:async/stream_pipe.dart:91) TechEmpower#3 _ForwardingStream.listen (dart:async/stream_pipe.dart:86) TechEmpower#4 _ServerSocket.listen (dart:io-patch/socket_patch.dart:1351) TechEmpower#5 _HttpServer.listen (dart:io/http_impl.dart:2278) TechEmpower#6 _startServer.<anonymous closure> (file:///server.dart:88:12) TechEmpower#7 _RootZone.runUnary (dart:async/zone.dart:1371) TechEmpower#8 _FutureListener.handleValue (dart:async/future_impl.dart:129) TechEmpower#9 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:636) TechEmpower#10 _Future._propagateToListeners (dart:async/future_impl.dart:665) TechEmpower#11 _Future._completeWithValue (dart:async/future_impl.dart:478) TechEmpower#12 Future.wait.<anonymous closure> (dart:async/future.dart:362) TechEmpower#13 _RootZone.runUnary (dart:async/zone.dart:1371) TechEmpower#14 _FutureListener.handleValue (dart:async/future_impl.dart:129) TechEmpower#15 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:636) TechEmpower#16 _Future._propagateToListeners (dart:async/future_impl.dart:665) TechEmpower#17 _Future._completeWithValue (dart:async/future_impl.dart:478) TechEmpower#18 Future.wait.<anonymous closure> (dart:async/future.dart:362) TechEmpower#19 _RootZone.runUnary (dart:async/zone.dart:1371) TechEmpower#20 _FutureListener.handleValue (dart:async/future_impl.dart:129) TechEmpower#21 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:636) TechEmpower#22 _Future._propagateToListeners (dart:async/future_impl.dart:665) TechEmpower#23 _Future._completeWithValue (dart:async/future_impl.dart:478) TechEmpower#24 _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:510) TechEmpower#25 _microtaskLoop (dart:async/schedule_microtask.dart:41) TechEmpower#26 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50) TechEmpower#27 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:99) TechEmpower#28 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:152)
Here's an example of the error output from before this change: Unhandled exception: Bad state: Stream was already listened to #0 _RawServerSocket.listen (dart:io-patch/socket_patch.dart:1106) #1 new _ForwardingStreamSubscription (dart:async/stream_pipe.dart:123) #2 _ForwardingStream._createSubscription (dart:async/stream_pipe.dart:91) #3 _ForwardingStream.listen (dart:async/stream_pipe.dart:86) #4 _ServerSocket.listen (dart:io-patch/socket_patch.dart:1351) #5 _HttpServer.listen (dart:io/http_impl.dart:2278) #6 _startServer.<anonymous closure> (file:///server.dart:88:12) #7 _RootZone.runUnary (dart:async/zone.dart:1371) #8 _FutureListener.handleValue (dart:async/future_impl.dart:129) #9 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:636) #10 _Future._propagateToListeners (dart:async/future_impl.dart:665) #11 _Future._completeWithValue (dart:async/future_impl.dart:478) #12 Future.wait.<anonymous closure> (dart:async/future.dart:362) #13 _RootZone.runUnary (dart:async/zone.dart:1371) #14 _FutureListener.handleValue (dart:async/future_impl.dart:129) #15 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:636) #16 _Future._propagateToListeners (dart:async/future_impl.dart:665) #17 _Future._completeWithValue (dart:async/future_impl.dart:478) #18 Future.wait.<anonymous closure> (dart:async/future.dart:362) #19 _RootZone.runUnary (dart:async/zone.dart:1371) #20 _FutureListener.handleValue (dart:async/future_impl.dart:129) #21 _Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:636) #22 _Future._propagateToListeners (dart:async/future_impl.dart:665) #23 _Future._completeWithValue (dart:async/future_impl.dart:478) #24 _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:510) #25 _microtaskLoop (dart:async/schedule_microtask.dart:41) #26 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50) #27 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:99) #28 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:152)
Just the code, server stuff also needs attention