nonConcurrentMethod

Explanation

This decorator ensures that method will only run once at any given time. It will ignore subsequent calls if the method is still running. The returned decorated method has a “running” flag which indicates whether or not it is still running.

Returns

The now-decorated argument method.

Usage

@nonConcurrentMethod
someFunction():
pass

Example

from vortex.DeferUtil import nonConcurrentMethod, deferToThreadWrapWithLogger
from twisted.internet import reactor
import time, logging


logger = logging.getLogger(__name__)

@deferToThreadWrapWithLogger(logger)
@nonConcurrentMethod
def usuallyConcurrent():
    time.sleep(2)
    print("Function Called")

if __name__ == "__main__":

    reactor.callLater(0.1, usuallyConcurrent)
    reactor.callLater(0.1, usuallyConcurrent)
    reactor.callLater(3.5, reactor.stop)
    reactor.run()

The example should only run usuallyConcurrent once and will produce this output:

Function Called

Process finished with exit code 0