)]}'
{"rally/common/broker.py":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"8f86cae2364895038124bfcb5b325a1abc607971","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    queue \u003d collections.deque()"},{"line_number":92,"context_line":"    is_published \u003d threading.Event()"},{"line_number":93,"context_line":"    _publisher(publish, queue, is_published)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    consumers \u003d []"},{"line_number":96,"context_line":"    for i in range(consumers_count):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a2ca52d_b31d7475","line":93,"updated":"2015-10-13 23:08:54.000000000","message":"is_published is not required in this case.","commit_id":"e6a9c915514082f4ca407c0fd2049f5fef93c1c5"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"1a2a100cd11d7c585930c3b8d010290b29e0a9b5","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    queue \u003d collections.deque()"},{"line_number":92,"context_line":"    is_published \u003d threading.Event()"},{"line_number":93,"context_line":"    _publisher(publish, queue, is_published)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    consumers \u003d []"},{"line_number":96,"context_line":"    for i in range(consumers_count):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a2ca52d_e7eebc21","line":93,"in_reply_to":"5a2ca52d_9806501f","updated":"2015-10-14 05:19:12.000000000","message":"I agree with Pavel, if we change the order we can remove is_published and simplify code and remove race","commit_id":"e6a9c915514082f4ca407c0fd2049f5fef93c1c5"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"b996eb0808270125bf2a7c9bc470ddf5d591cc31","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    queue \u003d collections.deque()"},{"line_number":92,"context_line":"    is_published \u003d threading.Event()"},{"line_number":93,"context_line":"    _publisher(publish, queue, is_published)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    consumers \u003d []"},{"line_number":96,"context_line":"    for i in range(consumers_count):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a2ca52d_9806501f","line":93,"in_reply_to":"5a2ca52d_b31d7475","updated":"2015-10-14 01:43:59.000000000","message":"actually I prefer remove this to keep logic concise","commit_id":"e6a9c915514082f4ca407c0fd2049f5fef93c1c5"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"670a0a7a8654e994b2e993e0e920a1965fdfb687","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    queue \u003d collections.deque()"},{"line_number":92,"context_line":"    is_published \u003d threading.Event()"},{"line_number":93,"context_line":"    _publisher(publish, queue, is_published)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    consumers \u003d []"},{"line_number":96,"context_line":"    for i in range(consumers_count):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a2ca52d_0a773d3b","line":93,"in_reply_to":"5a2ca52d_e7eebc21","updated":"2015-10-14 06:07:37.000000000","message":"got it, I agreed with removing is_published too","commit_id":"e6a9c915514082f4ca407c0fd2049f5fef93c1c5"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"f33632eb03885f576d3c3f99ac7751a653eea269","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    cache \u003d {}"},{"line_number":33,"context_line":"    while True:"},{"line_number":34,"context_line":"        if not queue:"},{"line_number":35,"context_line":"            break"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            try:"},{"line_number":38,"context_line":"                args \u003d queue.popleft()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a2ca52d_5a913146","line":35,"updated":"2015-10-15 17:08:56.000000000","message":"Commit message says that is possible when queue is empty but publisher still working, and will produce more data into queue?\n\nIt so, consumer can break too early, and we have the same result.","commit_id":"7f76ad62aa68d8d71fe2773ae8ad817103051b88"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"18acd25c46340d2192f76329e0a409bd66155946","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    cache \u003d {}"},{"line_number":33,"context_line":"    while True:"},{"line_number":34,"context_line":"        if not queue:"},{"line_number":35,"context_line":"            break"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            try:"},{"line_number":38,"context_line":"                args \u003d queue.popleft()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a2ca52d_fa6cbd36","line":35,"in_reply_to":"5a2ca52d_5a913146","updated":"2015-10-15 17:11:10.000000000","message":"it\u0027s impossible case","commit_id":"7f76ad62aa68d8d71fe2773ae8ad817103051b88"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"c24bb3470256d0660bf17c1aa225a8274d3acdd4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    cache \u003d {}"},{"line_number":33,"context_line":"    while True:"},{"line_number":34,"context_line":"        if not queue:"},{"line_number":35,"context_line":"            break"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            try:"},{"line_number":38,"context_line":"                args \u003d queue.popleft()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a2ca52d_6229df36","line":35,"in_reply_to":"5a2ca52d_5ac93125","updated":"2015-10-15 18:52:12.000000000","message":"OK, imagine (under the load) that each publish() call takes a second and you need to do a hundred of these. Are you willing to wait for 100 seconds when you can do something else meanwhile?\n\nNot to say this breaks the whole pattern of publisher/consumer, making it merely a \"create a list I will apply consumers on\". For that, one can use ThreadPool as is.","commit_id":"7f76ad62aa68d8d71fe2773ae8ad817103051b88"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"992d3ea7e39cb48f3a6cf59594d84eca599ac207","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    cache \u003d {}"},{"line_number":33,"context_line":"    while True:"},{"line_number":34,"context_line":"        if not queue:"},{"line_number":35,"context_line":"            break"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            try:"},{"line_number":38,"context_line":"                args \u003d queue.popleft()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a2ca52d_5ac93125","line":35,"in_reply_to":"5a2ca52d_fa6cbd36","updated":"2015-10-15 17:13:06.000000000","message":"publish() will be finished before any of consumers will even start.","commit_id":"7f76ad62aa68d8d71fe2773ae8ad817103051b88"}]}
