Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [paho-dev] Python MQTT client publish.single/multiple blocks indefinitely?

Cool, thanks for the quick fix.  I'll take a look later to check that it works for me too.  Good to make sure I'm not going crazy and this really should work. :)

-Tony


On Sat, May 17, 2014 at 1:41 PM, Roger Light <roger@xxxxxxxxxx> wrote:
Hi Tony,

I had a chance to look at this properly and you're right. I've pushed
a fix to the repository. It's unclear how this worked when I used it
before!

Cheers,

Roger


On Sat, May 17, 2014 at 9:11 PM, Tony DiCola <tony@xxxxxxxxxxxxxx> wrote:
> Sorry missed your reply since I'm signed up for digest emails. In reference
> to this:
>
>> Hi Tony,
>>
>> publish.single() and multiple() do use loop_forever() which will block
>> "forever", but they use callbacks to break out of this. The
>> _on_publish() callback calls disconnect() when all of the messages
>> have been sent, and this (should) cause it to drop out of the
>> loop_forever() call.
>>
>> If that isn't working for you, can you describe something about your
>> setup? (OS, Python version, ...)
>>
>> Cheers,
>>
>> Roger
>
> Here's my setup:
>
> Broker server: mosquitto v1.3.1 running on an Ubuntu 14.04 LTS server image
> on Amazon EC2.  Broker is using the stock mosquitto config but with TLS
> enabled and a self-signed cert being used for TLS.
>
> Client: paho-mqtt 0.9 client (installed with pip from
> https://pypi.python.org/pypi/paho-mqtt/0.9 ) running on a Raspberry Pi with
> Raspbian 'jessie' (Debian testing).
>
> On another machine I subscribed to a topic using mosquitto_sub (just a
> simple 'hello/world' topic).  On the Rasbperry Pi I ran this simple script
> to test sending a message to the hello world topic:
>
> import ssl
> import paho.mqtt.publish as publish
>
> tls = { 'ca_certs': '/etc/mosquitto/ca_certificates/mqtt_ca.crt',
> 'certfile': '/etc/mosquitto/certs/mqtt_client.crt',
> 'keyfile': '/etc/mosquitto/certs/mqtt_client.key',
> 'tls_version': ssl.PROTOCOL_TLSv1 }
>
> publish.single('hello/world',
> payload='hello world',
> hostname='tdicola.diydevicecloud.net',
> port=8883,
> tls=tls)
>
> When run I can see the message getting sent to the topic--my subscribed
> machine prints out the 'hello world' message.  However the python script
> never finishes running and I have to stop it with ctrl-c.  When stopped it
> seems to be waiting in a select call (probably waiting for some network
> traffic to be received in loop_forever).
>
> Is there some special server config that has to be enabled to send back a
> publish message that might be getting missed?  I'm not super familiar with
> the MQTT protocol but since this message is getting sent with the default
> qos level 0 there shouldn't be any acknowledgement of the send right?
> Thanks for the help!
>
> -Tony
>
>
> On Fri, May 16, 2014 at 2:56 PM, Tony DiCola <tony@xxxxxxxxxxxxxx> wrote:
>>
>> Hey all, sorry if this is a known issue but is it by design that the
>> publish.single or multiple functions are supposed to block indefinitely?  I
>> noticed the source for them connects, sends messages, and then calls
>> client.loop_forever() so execution never returns back to the caller.  How is
>> a client application supposed to use these functions?
>
>


Back to the top