[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