Significance of yield sleep in AutoBahn twisted code

#1

Hi,

I am new to AutoBahn/crossbar/twisted and trying to write a RPC progressive call. In the below code, why yield sleep(1) is needed? If I remove that, client is getting all the responses in one chunk instead of progressive. What does yield sleep(1) do for progressive calls?

My understanding was details.progress() takes care of progressive. Can you please explain?

@inlineCallbacks
        def longop(n, details=None):
            if details.progress:
                # caller can (and requested to) consume progressive results
                for i in range(n):
                    details.progress(i)
                    yield sleep(1)
            else:
                # process like a normal call (not producing progressive results)
                yield sleep(1 * n)
            returnValue(n)

        yield self.register(longop, 'com.myapp.longop', RegisterOptions(details_arg='details'))


Thanks,
Chaitanya.
0 Likes

#2

Hi Chaitanya,

Hi,

I am new to AutoBahn/crossbar/twisted and trying to write a RPC progressive
call. In the below code, why yield sleep(1) is needed? If I remove that,
client is getting all the responses in one chunk instead of progressive.
What does yield sleep(1) do for progressive calls?

My understanding was details.progress() takes care of progressive. Can you
please explain?

The sleep is not needed. In the example it's simply a way to simulate
an operation that takes a long time.

If you remove the sleep, then the for loop will iterate as fast as
your CPU can process it, which wouldn't be a very good example of
progressive calls.

Hope that clears things up. So the sleep is just something that was
put in the example to illustrate. In a real application it would be
some async operation that takes some time.

Elvis

···

2016-01-05 18:02 GMT+01:00 Chaitanya Chilukoori <sree...@gmail.com>:

@inlineCallbacks
        def longop(n, details=None):
            if details.progress:
                # caller can (and requested to) consume progressive results
                for i in range(n):
                    details.progress(i)
                    yield sleep(1)
            else:
                # process like a normal call (not producing progressive
results)
                yield sleep(1 * n)
            returnValue(n)

        yield self.register(longop, 'com.myapp.longop',
RegisterOptions(details_arg='details'))

Thanks,

Chaitanya.

--
You received this message because you are subscribed to the Google Groups
"Autobahn" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to autobahnws+...@googlegroups.com.
To post to this group, send email to autob...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/autobahnws/a426b0d0-b3d0-4fc3-9cda-15e6a9e7f8e1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

0 Likes

#3

Thank you. That helps.

···

On Tuesday, January 5, 2016 at 11:03:55 AM UTC-7, Elvis Stansvik wrote:

Hi Chaitanya,

2016-01-05 18:02 GMT+01:00 Chaitanya Chilukoori sre...@gmail.com:

Hi,

I am new to AutoBahn/crossbar/twisted and trying to write a RPC progressive

call. In the below code, why yield sleep(1) is needed? If I remove that,

client is getting all the responses in one chunk instead of progressive.

What does yield sleep(1) do for progressive calls?

My understanding was details.progress() takes care of progressive. Can you

please explain?

The sleep is not needed. In the example it’s simply a way to simulate

an operation that takes a long time.

If you remove the sleep, then the for loop will iterate as fast as

your CPU can process it, which wouldn’t be a very good example of

progressive calls.

Hope that clears things up. So the sleep is just something that was

put in the example to illustrate. In a real application it would be

some async operation that takes some time.

Elvis

@inlineCallbacks

    def longop(n, details=None):
        if details.progress:
            # caller can (and requested to) consume progressive results
            for i in range(n):
                details.progress(i)
                yield sleep(1)
        else:
            # process like a normal call (not producing progressive

results)

            yield sleep(1 * n)
        returnValue(n)
    yield self.register(longop, 'com.myapp.longop',

RegisterOptions(details_arg=‘details’))

Thanks,

Chaitanya.

You received this message because you are subscribed to the Google Groups

“Autobahn” group.

To unsubscribe from this group and stop receiving emails from it, send an

email to autobahnws+...@googlegroups.com.

To post to this group, send email to auto...@googlegroups.com.

To view this discussion on the web visit

https://groups.google.com/d/msgid/autobahnws/a426b0d0-b3d0-4fc3-9cda-15e6a9e7f8e1%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

0 Likes