gevent.hub- Event-loop hub¶
Return the hub for the current thread.
If a hub does not exist in the current thread, a new one is
created of the type returned by
A greenlet that runs the event loop.
It is created automatically by
Every time this greenlet (i.e., the event loop) is switched to, if
the current greenlet has a
switch_out method, it will be called. This
allows a greenlet to take some cleanup actions before yielding control. This method
should not call any gevent blocking functions.
NOT_ERROR= (<class 'greenlet.GreenletExit'>, <class 'SystemExit'>)¶
Instances of these classes are not considered to be errors and do not get logged/printed when raised by the event loop.
SYSTEM_ERROR= (<class 'KeyboardInterrupt'>, <class 'SystemExit'>, <class 'SystemError'>)¶
If instances of these classes are raised into the event loop, they will be propagated out to the main greenlet (where they will usually be caught by Python itself)
Cancel an in-progress call to
wait() by throwing the given error
in the waiting greenlet.
A non-data descriptor like @property. The difference is that when the property is assigned to, it is cached in the instance and the function is not called on that instance again.
handle_error(context, type, value, tb)¶
Called by the event loop when an error occurs. The arguments
type, value, and tb are the standard tuple returned by
Applications can set a property on the hub with this same signature to override the error handling provided by this class.
|Parameters:||context – If this is
Wait for the event loop to finish. Exits only when there are no more spawned greenlets, started servers, active timeouts or watchers.
If timeout is provided, wait no longer for the specified number of seconds.
Returns True if exited because the loop finished execution. Returns False if exited because of timeout expired.
loop_class= [<class 'gevent.libev.corecext.loop'>]¶
print_exception(context, type, value, tb)¶
resolver_class= ['gevent.resolver_thread.Resolver', 'gevent.resolver_ares.Resolver', 'gevent.socket.BlockingResolver']¶
The class or callable object, or the name of a factory function or class,
that will be used to create
resolver. By default, configured according to
Name Resolution (DNS). If a list, a list of objects in preference order.
Entry-point to running the loop. This method is called automatically when the hub greenlet is scheduled; do not call it directly.
|Raises:||LoopExit – If the loop finishes running. This means that there are no other scheduled greenlets, and no active watchers or servers. In some situations, this indicates a programming error.|
Wait until the watcher (which should not be started) is ready.
The current greenlet will be unscheduled during this time.
A low level communication utility for greenlets.
Waiter is a wrapper around greenlet’s
throw() calls that makes them somewhat safer:
throw()is called before the receiver calls
Waiterwill store the value/exception. The following
get()will return the value/raise the exception.
>>> result = Waiter() >>> timer = get_hub().loop.timer(0.1) >>> timer.start(result.switch, 'hello from Waiter') >>> result.get() # blocks for 0.1 seconds 'hello from Waiter'
>>> result = Waiter() >>> timer = get_hub().loop.timer(0.1) >>> timer.start(result.switch, 'hi from Waiter') >>> sleep(0.2) >>> result.get() # returns immediatelly without blocking 'hi from Waiter'
This a limited and dangerous way to communicate between
greenlets. It can easily leave a greenlet unscheduled forever
if used incorrectly. Consider using safer classes such as
If a value/an exception is stored, return/raise it. Otherwise until switch() or throw() is called.
Return true if and only if it holds a value or an exception
Return true if and only if it is ready and holds a value
Switch to the greenlet if one’s available. Otherwise store the value.
Switch to the greenlet with the exception. If there’s no greenlet, store the exception.
Exception thrown when the hub finishes running.
In a normal application, this is never thrown or caught
explicitly. The internal implementation of functions like
joinall() may catch it, but user code
generally should not.
Errors in application programming can also lead to this exception being raised. Some examples include (but are not limited too):
gevent.core - event loop based on libev