Comments (5)
Good stuff. The "set to None" is there to help reference counting clean up channels under high load without relying on the garbage collector. I'll work on fixing this.
from haigha.
I think a good way to way to solve this would be to restructure the code in a try-finally
block and document clearly that the listeners will be able to access the channel attributes at call time but they'll be out of scope after that.
The close listeners are brand new as I needed them to fix a variety of problems in the ChannelPool
so please keep writing up bugs for anything associated with them.
def _closed_cb(self, final_frame=None):
if final_frame:
self._connection.send_frame( final_frame )
try:
for listener in self._close_listeners:
listener( self )
finally:
self._pending_events = deque()
self._frame_buffer = deque()
for protocol_class in self._class_map.values():
protocol_class._cleanup()
self._connection = None
self.channel = None
self.exchange = None
self.queue = None
self.basic = None
self.tx = None
self._class_map = None
self._close_listeners = set()
from haigha.
That looks very reasonable. I think that this also needs to be complimented with a small change in Channel class that allows the user to access the ch.closed attribute at any time without crashing. Perhaps something like this:
@property
def closed(self):
return self.channel is None or self.channel.closed
# Usage example
if not ch.closed:
ch.close()
from haigha.
The user would also need to know that their last opportunity to extract close_info is in the close-listener callback. However, in my code, I also wished I could to do something like this from anywhere:
if ch.closed:
self._logger.error("Channel closed unexpectedly; close_info: %r", ch.close_info)
from haigha.
Fixed this in master by moving all channel state into Channel and out of ChannelClass. Will go out with the next release later today.
from haigha.
Related Issues (20)
- SyntaxError on fresh install with python 7 HOT 5
- Delivery tags in publisher confirm mode are not handled properly
- Synchronous basic.get with consumer=None is broken HOT 1
- Connection blocked by one consumer HOT 2
- cannot publish message to default exchange using gevent transport HOT 1
- Status of Blocking Socket Transport in Haigha HOT 1
- basic.consume doesn't return consumer_tag, so how to get it? HOT 1
- Unroutable message hangs haigha in publisher confirm mode HOT 4
- Can't get close_info from synchronous connection
- TypeError: getsockaddrarg() takes exactly 2 arguments (4 given) HOT 3
- Connection.transport_closed should set self._closed
- BasicClass.get return value is inconsistent in synchronous mode HOT 1
- Message frames might be interleaved when sending from multiple greenlets HOT 8
- Failed to parse timestamp in frame reader HOT 2
- Connection heartbeat arg description doesn't match implementation HOT 13
- Python3.4 support?
- Socket fds are leaked upon connection failure HOT 1
- Is it possible to connect on a rabbitmq cluster? HOT 4
- Haigha write "s" for short int value in tables instead of "U/u"
- Haigha crash when trying to deal with a message with empty body
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from haigha.