)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"5b6f5dd46552dff78cc6e9bfee2f82030c520d6b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"by using more futures. To enable this (as well as"},{"line_number":13,"context_line":"to enable getting off eventlet), add a thread pool"},{"line_number":14,"context_line":"based executor which will process incoming messages"},{"line_number":15,"context_line":"using the pool."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Also begins adding according docs as well for the"},{"line_number":18,"context_line":"different types of executors that are available."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"5a890539_fe951b88","line":15,"updated":"2014-12-03 15:35:06.000000000","message":"eventlet is used with monkey patching in OpenStack. I don\u0027t see anything related to monkey patching if your code to \"undo\" monkey patching and use the real threading module. Does it mean that it cannot be used with monkey patching, or did I miss something?","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a7116cf2f2a700d4d446b4069b5674259b56e043","unresolved":false,"context_lines":[{"line_number":12,"context_line":"by using more futures. To enable this (as well as"},{"line_number":13,"context_line":"to enable getting off eventlet), add a thread pool"},{"line_number":14,"context_line":"based executor which will process incoming messages"},{"line_number":15,"context_line":"using the pool."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Also begins adding according docs as well for the"},{"line_number":18,"context_line":"different types of executors that are available."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"5a890539_06cf8c2a","line":15,"in_reply_to":"5a890539_fe951b88","updated":"2014-12-05 23:45:20.000000000","message":"Right, the point is that you don\u0027t see anything related to monkey patching since it should operate the same when eventlet monkey patches the threading library (the eventlet is enabled usecase) and when it doesn\u0027t (the no eventlet usecase); aka it\u0027s transparent.\n\nDoes that seem to make sense?\n\nThe concurrent.futures thread executor uses the threading module itself, and so therefore if eventlet monkey patches that threading module (which it should be doing in all openstack projects) then the concurrent.futures thread executor will not be using real threads, but instead will be using greenthreads (thus the transparent part); if eventlet does not exist then the concurrent.futures thread executor just uses real threads and this code in oslo.messaging doesn\u0027t know the difference...","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"}],"doc/source/executors.rst":[{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"20174555ffb2b7b0a3832b0558edddf10655fd11","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Executor types"},{"line_number":11,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Executors provide the way a incoming message will be dispatched so that the"},{"line_number":14,"context_line":"message can be used for meaningful work. Different types of executors are"},{"line_number":15,"context_line":"supported, each with its own set of restrictions and capabilities."}],"source_content_type":"text/x-rst","patch_set":12,"id":"baada198_3d97e591","line":13,"updated":"2014-07-03 04:05:57.000000000","message":"(tiny nit) ... *an* incoming message ...","commit_id":"6c17f18fce3fceed2199094264d6b35708fbe1b5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"0c24de426db4979e2d77be30a9bf140e076d7462","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Executor types"},{"line_number":11,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Executors provide the way an incoming message will be dispatched so that the"},{"line_number":14,"context_line":"message can be used for meaningful work. Different types of executors are"},{"line_number":15,"context_line":"supported, each with its own set of restrictions and capabilities."}],"source_content_type":"text/x-rst","patch_set":19,"id":"5a890539_b86c86d1","line":13,"updated":"2014-11-15 17:21:52.000000000","message":"\"Executors are providing\", no?","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a7116cf2f2a700d4d446b4069b5674259b56e043","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Executor types"},{"line_number":11,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Executors provide the way an incoming message will be dispatched so that the"},{"line_number":14,"context_line":"message can be used for meaningful work. Different types of executors are"},{"line_number":15,"context_line":"supported, each with its own set of restrictions and capabilities."}],"source_content_type":"text/x-rst","patch_set":19,"id":"5a890539_861d3cc1","line":13,"in_reply_to":"5a890539_b86c86d1","updated":"2014-12-05 23:45:20.000000000","message":"Agreed.","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"faf81a3a2b5881bd9a2723e91a91067cb6556d2d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Executors"},{"line_number":3,"context_line":"---------"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. automodule:: oslo.messaging._executors"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":".. currentmodule:: oslo.messaging"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"3a961159_edce7a2d","line":5,"updated":"2014-12-17 16:58:03.000000000","message":"I wonder if this is ok to private stuffs in the documentation.","commit_id":"0d63b6c4adf6defa822a17c6ceab65faa1bcf12d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"857508dbabb7e76eb8bf73981ededec7f22be978","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Executors"},{"line_number":3,"context_line":"---------"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. automodule:: oslo.messaging._executors"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":".. currentmodule:: oslo.messaging"},{"line_number":8,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"3a961159_f6059b14","line":5,"in_reply_to":"3a961159_edce7a2d","updated":"2014-12-18 00:11:26.000000000","message":"Idk; to me different between internals and people desiring to use it...\n\nI put big warnings around my stuff in taskflow for this...\n\nSee header @ http://docs.openstack.org/developer/taskflow/utils.html\n\nI still feel useful to have it show-up; even if people aren\u0027t supposed to use it...","commit_id":"0d63b6c4adf6defa822a17c6ceab65faa1bcf12d"}],"oslo/messaging/_executors/base.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"0c24de426db4979e2d77be30a9bf140e076d7462","unresolved":false,"context_lines":[{"line_number":21,"context_line":"_pool_opts \u003d ["},{"line_number":22,"context_line":"    cfg.IntOpt(\u0027rpc_thread_pool_size\u0027,"},{"line_number":23,"context_line":"               default\u003d64,"},{"line_number":24,"context_line":"               help\u003d\u0027Size of RPC thread pool\u0027),"},{"line_number":25,"context_line":"]"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_d87152a9","line":24,"updated":"2014-11-15 17:21:52.000000000","message":"missing period","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"faf81a3a2b5881bd9a2723e91a91067cb6556d2d","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# NOTE(sileht): value choosen according the best practice from kombu"},{"line_number":22,"context_line":"# http://kombu.readthedocs.org/en/latest/reference/kombu.common.html#kombu.common.eventloop"},{"line_number":23,"context_line":"POLL_TIMEOUT \u003d 1"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"_pool_opts \u003d ["},{"line_number":26,"context_line":"    cfg.IntOpt(\u0027rpc_thread_pool_size\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_90b9c9cd","line":23,"updated":"2014-12-17 16:58:03.000000000","message":"This is no more usefull.","commit_id":"0d63b6c4adf6defa822a17c6ceab65faa1bcf12d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"486874a36940b8a0d22ecfc0b3c798aa4de6ce8f","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# NOTE(sileht): value choosen according the best practice from kombu"},{"line_number":22,"context_line":"# http://kombu.readthedocs.org/en/latest/reference/kombu.common.html#kombu.common.eventloop"},{"line_number":23,"context_line":"POLL_TIMEOUT \u003d 1"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"_pool_opts \u003d ["},{"line_number":26,"context_line":"    cfg.IntOpt(\u0027rpc_thread_pool_size\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_73129d63","line":23,"in_reply_to":"3a961159_90b9c9cd","updated":"2014-12-17 23:31:38.000000000","message":"Done","commit_id":"0d63b6c4adf6defa822a17c6ceab65faa1bcf12d"}],"oslo/messaging/_executors/impl_thread.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"327b5cd1575e964679f48b785ee7c8002e323db1","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        alive \u003d threading.Event()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        def _dispatch(incoming):"},{"line_number":51,"context_line":"            with self.dispatcher(incoming) as callback:"},{"line_number":52,"context_line":"                callback()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        def _finish_future(f):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FWyg%3D","line":51,"updated":"2014-03-18 12:19:08.000000000","message":"Note, we want the enter and exit part of this context manager to be called from the main thread - this is based on past behaviour of the rabbit and qpid drivers and I think the assumption is their connection/session objects aren\u0027t thread-safe so we don\u0027t want to be acking messages from dispatch threads","commit_id":"3c6694ab2b54ff192daaa19ecb1735d32d5930a0"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"0fedeadc645c2d0a66fe36be2a0316fcdbdcc3a0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"#    Copyright (C) 2014 Yahoo! Inc. All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_3cf9e0e9","line":3,"updated":"2014-07-01 21:17:56.000000000","message":"Remove this please","commit_id":"c07467f99fd0d4bb54668364f434253391ea8276"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"0fedeadc645c2d0a66fe36be2a0316fcdbdcc3a0","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self._executor_cls \u003d futures.ThreadPoolExecutor"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def start(self):"},{"line_number":44,"context_line":"        if any((self._poller, self._executor)):"},{"line_number":45,"context_line":"            return"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self._executor \u003d self._executor_cls(self.conf.rpc_thread_pool_size)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_1c425c10","line":44,"updated":"2014-07-01 21:17:56.000000000","message":"if self._poller or self._executor:\n\nwould save the call to the constructor for the tuple and call to any.","commit_id":"c07467f99fd0d4bb54668364f434253391ea8276"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"795642001ce101c7967295fa750e7e9910df85cd","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self._executor_cls \u003d futures.ThreadPoolExecutor"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def start(self):"},{"line_number":44,"context_line":"        if any((self._poller, self._executor)):"},{"line_number":45,"context_line":"            return"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self._executor \u003d self._executor_cls(self.conf.rpc_thread_pool_size)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_80ba7ebe","line":44,"in_reply_to":"baada198_1c425c10","updated":"2014-07-01 23:19:30.000000000","message":"Done","commit_id":"c07467f99fd0d4bb54668364f434253391ea8276"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"0fedeadc645c2d0a66fe36be2a0316fcdbdcc3a0","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                enter_method \u003d context.__enter__()"},{"line_number":73,"context_line":"                exit_method \u003d context.__exit__"},{"line_number":74,"context_line":"                complete_method \u003d functools.partial(complete,"},{"line_number":75,"context_line":"                                                    exit_method\u003dexit_method)"},{"line_number":76,"context_line":"                try:"},{"line_number":77,"context_line":"                    f \u003d self._executor.submit(enter_method)"},{"line_number":78,"context_line":"                except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_fcd84855","line":75,"updated":"2014-07-01 21:17:56.000000000","message":"Why not reorder the parameters to complete such that `exit_method` is first and thus doesn\u0027t require that you use keyword arguments here?","commit_id":"c07467f99fd0d4bb54668364f434253391ea8276"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"795642001ce101c7967295fa750e7e9910df85cd","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                enter_method \u003d context.__enter__()"},{"line_number":73,"context_line":"                exit_method \u003d context.__exit__"},{"line_number":74,"context_line":"                complete_method \u003d functools.partial(complete,"},{"line_number":75,"context_line":"                                                    exit_method\u003dexit_method)"},{"line_number":76,"context_line":"                try:"},{"line_number":77,"context_line":"                    f \u003d self._executor.submit(enter_method)"},{"line_number":78,"context_line":"                except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a0b142e3","line":75,"in_reply_to":"baada198_fcd84855","updated":"2014-07-01 23:19:30.000000000","message":"Done","commit_id":"c07467f99fd0d4bb54668364f434253391ea8276"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"0fedeadc645c2d0a66fe36be2a0316fcdbdcc3a0","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        alive.wait()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def stop(self):"},{"line_number":93,"context_line":"        if not all((self._poller, self._executor)):"},{"line_number":94,"context_line":"            return"},{"line_number":95,"context_line":"        self._executor.shutdown(wait\u003dFalse)"},{"line_number":96,"context_line":"        self._tombstone.set()"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_1cac1ca0","line":93,"updated":"2014-07-01 21:17:56.000000000","message":"Again (and below in wait), I\u0027m not sure that creating the tuple and calling all will be faster than saying `not (self._poller and self._executor)`","commit_id":"c07467f99fd0d4bb54668364f434253391ea8276"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"795642001ce101c7967295fa750e7e9910df85cd","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        alive.wait()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def stop(self):"},{"line_number":93,"context_line":"        if not all((self._poller, self._executor)):"},{"line_number":94,"context_line":"            return"},{"line_number":95,"context_line":"        self._executor.shutdown(wait\u003dFalse)"},{"line_number":96,"context_line":"        self._tombstone.set()"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c0b476d3","line":93,"in_reply_to":"baada198_1cac1ca0","updated":"2014-07-01 23:19:30.000000000","message":"Done","commit_id":"c07467f99fd0d4bb54668364f434253391ea8276"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"e964d0254d89c2504b79c838bb155358d425431e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    on reception of an incoming message places the message to be processed in"},{"line_number":33,"context_line":"    a thread pool to be executed at a later time."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    NOTE(harlowja): if eventlet is being used and the thread module is monkey"},{"line_number":36,"context_line":"    patched this should/is supposed to work the same as the eventlet based"},{"line_number":37,"context_line":"    executor."},{"line_number":38,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"da9df570_7ab22407","line":35,"updated":"2014-09-26 15:16:32.000000000","message":"Please declare the note outside of the doc string.","commit_id":"949b74f3fcd7782733d8339711dc741338f5b445"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a9c29e26d3ec248b7a6fd403fcc4ba741d7e70e9","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    on reception of an incoming message places the message to be processed in"},{"line_number":33,"context_line":"    a thread pool to be executed at a later time."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    NOTE(harlowja): if eventlet is being used and the thread module is monkey"},{"line_number":36,"context_line":"    patched this should/is supposed to work the same as the eventlet based"},{"line_number":37,"context_line":"    executor."},{"line_number":38,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"da9df570_4e74bd35","line":35,"in_reply_to":"da9df570_7ab22407","updated":"2014-09-26 18:48:55.000000000","message":"Ok","commit_id":"949b74f3fcd7782733d8339711dc741338f5b445"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"e964d0254d89c2504b79c838bb155358d425431e","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self._tombstone.clear()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        def complete(exit_method, f):"},{"line_number":56,"context_line":"            try:"},{"line_number":57,"context_line":"                exc \u003d f.exception()"},{"line_number":58,"context_line":"                if exc is not None:"}],"source_content_type":"text/x-python","patch_set":17,"id":"da9df570_3ab89cc7","line":55,"updated":"2014-09-26 15:16:32.000000000","message":"It looks complicated. Let it be private instance methods or static methods. It is very hard to get logic of `start` method with all of this declarations.","commit_id":"949b74f3fcd7782733d8339711dc741338f5b445"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a9c29e26d3ec248b7a6fd403fcc4ba741d7e70e9","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self._tombstone.clear()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        def complete(exit_method, f):"},{"line_number":56,"context_line":"            try:"},{"line_number":57,"context_line":"                exc \u003d f.exception()"},{"line_number":58,"context_line":"                if exc is not None:"}],"source_content_type":"text/x-python","patch_set":17,"id":"da9df570_8e8a2519","line":55,"in_reply_to":"da9df570_3ab89cc7","updated":"2014-09-26 18:48:55.000000000","message":"Ok dokie.","commit_id":"949b74f3fcd7782733d8339711dc741338f5b445"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"e964d0254d89c2504b79c838bb155358d425431e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                    self._incomplete.remove(f)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        @excutils.forever_retry_uncaught_exceptions"},{"line_number":69,"context_line":"        def executor_thread(alive):"},{"line_number":70,"context_line":"            alive.set()"},{"line_number":71,"context_line":"            while not self._tombstone.is_set():"},{"line_number":72,"context_line":"                incoming \u003d self.listener.poll(timeout\u003dself._poll_timeout)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da9df570_7ae5c4da","line":69,"updated":"2014-09-26 15:16:32.000000000","message":"ditto","commit_id":"949b74f3fcd7782733d8339711dc741338f5b445"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"5b6f5dd46552dff78cc6e9bfee2f82030c520d6b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import collections"},{"line_number":18,"context_line":"import functools"},{"line_number":19,"context_line":"import sys"},{"line_number":20,"context_line":"import threading"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from concurrent import futures"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_fe1fdb06","line":20,"updated":"2014-12-03 15:35:06.000000000","message":"If eventlet is used with monkey patching, you get greenthreads, not system threads. Am I right?","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a7116cf2f2a700d4d446b4069b5674259b56e043","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import collections"},{"line_number":18,"context_line":"import functools"},{"line_number":19,"context_line":"import sys"},{"line_number":20,"context_line":"import threading"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from concurrent import futures"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_26b9e879","line":20,"in_reply_to":"5a890539_fe1fdb06","updated":"2014-12-05 23:45:20.000000000","message":"Right. Eventlet monkey patches this, so in an eventlet environment this won\u0027t be \u0027real threads\u0027 from this import (but will be greened threads instead).\n\nhttps://github.com/eventlet/eventlet/blob/master/eventlet/patcher.py#L216\n\n\"\"\"\nThe exceptions are socket, which also patches the ssl\nmodule if present; and thread, which patches thread, threading, and Queue.\n\"\"\"","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"5b6f5dd46552dff78cc6e9bfee2f82030c520d6b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    # patched this should/is supposed to work the same as the eventlet based"},{"line_number":38,"context_line":"    # executor."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, conf, listener, callback, poll_timeout\u003dNone):"},{"line_number":41,"context_line":"        super(ThreadExecutor, self).__init__(conf, listener, callback)"},{"line_number":42,"context_line":"        self._poller \u003d None"},{"line_number":43,"context_line":"        self._executor \u003d None"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_3e3083e8","line":40,"updated":"2014-12-03 15:35:06.000000000","message":"How is it possible to specify the poll_timeout parameter?\n\nYou may use base.POLL_TIMEOUT by default instead of None, no?","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a7116cf2f2a700d4d446b4069b5674259b56e043","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    # patched this should/is supposed to work the same as the eventlet based"},{"line_number":38,"context_line":"    # executor."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, conf, listener, callback, poll_timeout\u003dNone):"},{"line_number":41,"context_line":"        super(ThreadExecutor, self).__init__(conf, listener, callback)"},{"line_number":42,"context_line":"        self._poller \u003d None"},{"line_number":43,"context_line":"        self._executor \u003d None"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_86f9bc50","line":40,"in_reply_to":"5a890539_3e3083e8","updated":"2014-12-05 23:45:20.000000000","message":"Ok, that\u0027s new, will use that.","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"5b6f5dd46552dff78cc6e9bfee2f82030c520d6b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            if exc is not None:"},{"line_number":55,"context_line":"                # Sorry no traceback is available (futures don\u0027t retain a"},{"line_number":56,"context_line":"                # traceback, at least currently, there are a few open bugs"},{"line_number":57,"context_line":"                # in python to add this...)"},{"line_number":58,"context_line":"                if not exit_method(type(exc), exc, None):"},{"line_number":59,"context_line":"                    raise exc"},{"line_number":60,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_a3c1bce5","line":57,"updated":"2014-12-03 15:35:06.000000000","message":"In Python 3, exceptions have a __traceback__ attribute which contains the traceback object.","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a7116cf2f2a700d4d446b4069b5674259b56e043","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            if exc is not None:"},{"line_number":55,"context_line":"                # Sorry no traceback is available (futures don\u0027t retain a"},{"line_number":56,"context_line":"                # traceback, at least currently, there are a few open bugs"},{"line_number":57,"context_line":"                # in python to add this...)"},{"line_number":58,"context_line":"                if not exit_method(type(exc), exc, None):"},{"line_number":59,"context_line":"                    raise exc"},{"line_number":60,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_a6f6b85b","line":57,"in_reply_to":"5a890539_a3c1bce5","updated":"2014-12-05 23:45:20.000000000","message":"Ah, ya, let me use six.reraise, it apparently handles that correctly.","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"faf81a3a2b5881bd9a2723e91a91067cb6556d2d","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @excutils.forever_retry_uncaught_exceptions"},{"line_number":80,"context_line":"    def _runner(self):"},{"line_number":81,"context_line":"        while not self._tombstone.is_set():"},{"line_number":82,"context_line":"            incoming \u003d self.listener.poll(timeout\u003dself._poll_timeout)"},{"line_number":83,"context_line":"            if incoming is None:"},{"line_number":84,"context_line":"                continue"},{"line_number":85,"context_line":"            # NOTE(harlowja): Do this to make sure the main thread does"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_f06ccd38","line":82,"updated":"2014-12-17 16:58:03.000000000","message":"I have recently removed this timeout and fixed the listener interface to be able to stop it and each driver handle the broker polling as it want (so rabbit/qpid poll every 1 seconds)\n\nSo now you can poll here forever without forcing a timeout, and call self.listener.stop() to stop it.","commit_id":"0d63b6c4adf6defa822a17c6ceab65faa1bcf12d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"385d361b1882c83da1fd8317b3c87f55d9ef9726","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @excutils.forever_retry_uncaught_exceptions"},{"line_number":80,"context_line":"    def _runner(self):"},{"line_number":81,"context_line":"        while not self._tombstone.is_set():"},{"line_number":82,"context_line":"            incoming \u003d self.listener.poll(timeout\u003dself._poll_timeout)"},{"line_number":83,"context_line":"            if incoming is None:"},{"line_number":84,"context_line":"                continue"},{"line_number":85,"context_line":"            # NOTE(harlowja): Do this to make sure the main thread does"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_16e2272f","line":82,"in_reply_to":"3a961159_7609ab2b","updated":"2014-12-17 23:35:41.000000000","message":"Ah, I see; let me adjust.","commit_id":"0d63b6c4adf6defa822a17c6ceab65faa1bcf12d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"486874a36940b8a0d22ecfc0b3c798aa4de6ce8f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @excutils.forever_retry_uncaught_exceptions"},{"line_number":80,"context_line":"    def _runner(self):"},{"line_number":81,"context_line":"        while not self._tombstone.is_set():"},{"line_number":82,"context_line":"            incoming \u003d self.listener.poll(timeout\u003dself._poll_timeout)"},{"line_number":83,"context_line":"            if incoming is None:"},{"line_number":84,"context_line":"                continue"},{"line_number":85,"context_line":"            # NOTE(harlowja): Do this to make sure the main thread does"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_7609ab2b","line":82,"in_reply_to":"3a961159_f06ccd38","updated":"2014-12-17 23:31:38.000000000","message":"Hmmm, let me see; someone needs to get this thread to stop though; and without a timeout this thread will just enter poll() and never come out :-/\n\nFrom looking at the listener code it still has \u0027def poll(self, timeout\u003dNone):\u0027??\n\nShould I change something? (maybe i\u0027m confused).","commit_id":"0d63b6c4adf6defa822a17c6ceab65faa1bcf12d"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"faf81a3a2b5881bd9a2723e91a91067cb6556d2d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            # This is hacky, needs to be fixed...."},{"line_number":89,"context_line":"            context \u003d self.dispatcher(incoming)"},{"line_number":90,"context_line":"            enter_method \u003d context.__enter__()"},{"line_number":91,"context_line":"            exit_method \u003d context.__exit__"},{"line_number":92,"context_line":"            try:"},{"line_number":93,"context_line":"                fut \u003d self._executor.submit(enter_method)"},{"line_number":94,"context_line":"            except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_b0d165cf","line":91,"updated":"2014-12-17 16:58:03.000000000","message":"I hope I will remove this crap soon. I like your idea of eventlet future executors.","commit_id":"0d63b6c4adf6defa822a17c6ceab65faa1bcf12d"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"486874a36940b8a0d22ecfc0b3c798aa4de6ce8f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            # This is hacky, needs to be fixed...."},{"line_number":89,"context_line":"            context \u003d self.dispatcher(incoming)"},{"line_number":90,"context_line":"            enter_method \u003d context.__enter__()"},{"line_number":91,"context_line":"            exit_method \u003d context.__exit__"},{"line_number":92,"context_line":"            try:"},{"line_number":93,"context_line":"                fut \u003d self._executor.submit(enter_method)"},{"line_number":94,"context_line":"            except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_962377a6","line":91,"in_reply_to":"3a961159_b0d165cf","updated":"2014-12-17 23:31:38.000000000","message":"+1","commit_id":"0d63b6c4adf6defa822a17c6ceab65faa1bcf12d"}],"tests/executors/test_executor.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"5b6f5dd46552dff78cc6e9bfee2f82030c520d6b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        incoming_message \u003d mock.MagicMock(ctxt\u003d{},"},{"line_number":76,"context_line":"                                          message\u003d{\u0027payload\u0027: \u0027data\u0027})"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        def fake_poll(*args, **kwargs):"},{"line_number":79,"context_line":"            if self.stop_before_return:"},{"line_number":80,"context_line":"                executor.stop()"},{"line_number":81,"context_line":"                return incoming_message"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_83184085","line":78,"updated":"2014-12-03 15:35:06.000000000","message":"Why do you need additional parameters?","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a7116cf2f2a700d4d446b4069b5674259b56e043","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        incoming_message \u003d mock.MagicMock(ctxt\u003d{},"},{"line_number":76,"context_line":"                                          message\u003d{\u0027payload\u0027: \u0027data\u0027})"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        def fake_poll(*args, **kwargs):"},{"line_number":79,"context_line":"            if self.stop_before_return:"},{"line_number":80,"context_line":"                executor.stop()"},{"line_number":81,"context_line":"                return incoming_message"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a890539_86a7fc4f","line":78,"in_reply_to":"5a890539_83184085","updated":"2014-12-05 23:45:20.000000000","message":"Don\u0027t think needed anymore, will rebase and should go away.","commit_id":"05f9618cf6f64360b2daab8d25ca69ee45919de6"}]}
