[Freeswitch-users] Python-ESL: ESLconnection.execute() blocked when handling channel_park under thread

Lesley Pervis lesley.pervis at gmail.com
Tue May 9 18:39:25 UTC 2017


Late to answer. Seems no one did, so I'd say don't write event listeners
that run in a Python interpreter that FreeSWITCH knows nothing about and
uses threading.

I looked at doing something similar in Python in the 1.2 days and after a
couple of roadblocks like this, I took the advice of the wiki and the
developers and developed what I needed in Lua. It worked out very well.

Python gets some love in Confluence, so I assume people use it, though. I
know for a fact that you can start a Lua event listener by executing a
luarun command via Python ESL API. Maybe it would also work in this case to
run a Python script in the interpreter managed by mod_python. Let FS manage
thread state.


On Tue, Apr 11, 2017 at 1:03 AM, Mohd Kamal Bin Mustafa <
kamal.mustafa at gmail.com> wrote:

> I have this python code:-
>
> import time
> import json
> import logging
> import threading
>
> from freeswitchESL import ESL
>
> class EventThread(threading.Thread):
>     def __init__(self, target, args):
>         super(EventThread, self).__init__()
>         self.target = target
>         self.args = args
>
>     def run(self):
>         print("Running target")
>         self.target(*self.args)
>
> def on_channel_park(e):
>     uuid = e.getHeader('Unique-ID')
>     print("Ringing")
>     conn.execute('ring_ready ', '', uuid)
>     conn.execute('sleep', '5500', uuid)
>     conn.execute('answer', '', uuid)
>     print("answered, playing media ...")
>     media_url = 'http://www.noiseaddicts.com/samples_1w72b820/17.mp3'
>     resp = conn.execute("playback", media_url, uuid)
>     print(resp.getHeader("Reply-Text"))
>     print("playback done")
>     print(resp)
>
> if __name__ == '__main__':
>     conn = ESL.ESLconnection('127.0.0.1', '8021', 'mypass')
>     conn.events('plain', 'all')
>     while True:
>         e = conn.recvEvent()
>         uuid = e.getHeader('Unique-ID')
>         events_message = json.loads(e.serialize('json'))
>         event_name = events_message['Event-Name'].lower()
>         method_name = 'on_%s' % event_name
>         print(method_name)
>
>         if event_name == 'channel_park':
>             print("spawning thread")
>             t = EventThread(on_channel_park, args=(e,))
>             t.start()
>
>         if event_name == 'playback_stop':
>             conn.execute("hangup", "", uuid)
>             print("Hanging up")
>
> Above, the code will stuck at conn.execute('ring_ready ', '', uuid) in
> on_channel_park(). It never went pass through until I hangup the call.
> In freeswitch log, it stopped at executing park().
>
> But if I moved ring_ready, sleep, answer outside of the thread it will
> work, i.e I can hear a playback:-
>
> def on_channel_park(e):
>     uuid = e.getHeader('Unique-ID')
>     print("answered, playing media ...")
>     media_url = 'http://www.noiseaddicts.com/samples_1w72b820/17.mp3'
>     resp = conn.execute("playback", media_url, uuid)
>     print(resp.getHeader("Reply-Text"))
>     print("playback done")
>     print(resp)
>
> if __name__ == '__main__':
>     conn = ESL.ESLconnection('127.0.0.1', '8021', 'mypass')
>     conn.events('plain', 'all')
>     while True:
>         e = conn.recvEvent()
>         uuid = e.getHeader('Unique-ID')
>         events_message = json.loads(e.serialize('json'))
>         event_name = events_message['Event-Name'].lower()
>         method_name = 'on_%s' % event_name
>         print(method_name)
>
>         if event_name == 'channel_park':
>             print("Ringing")
>             conn.execute('ring_ready ', '', uuid)
>             conn.execute('sleep', '5500', uuid)
>             conn.execute('answer', '', uuid)
>             print("spawning thread")
>             t = EventThread(on_channel_park, args=(e,))
>             t.start()
>
> Any idea why this happen ?
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://confluence.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20170509/721a49d0/attachment-0001.html 


More information about the FreeSWITCH-users mailing list