[asterisk-users] Simplest way of executing a non-blocking (async) python AGI script?
mhterres at gmail.com
Fri Jun 30 17:18:30 CDT 2017
Take a look on that:
Marcelo H. Terres <mhterres at gmail.com>
IM: mhterres at jabber.mundoopensource.com.br
On 30 June 2017 at 22:23, Jonathan H <lardconcepts at gmail.com> wrote:
> OK, I give up and come grovelling, "Fork" was suggested at 18:23, it's
> now 22:20 and I have been through 4 different methods, all block with
> a 2 second delay before returning to dialplan.
> Here are just some of the examples I have tried, as as per the
> suggestions, I am closing all possible outputs in the forked process.
> This is the most likely looking code based on the examples. I would
> really, really appreciate a couple of pointers as to where I might be
> going wrong:
> #! /usr/bin/env python3
> # -*- coding: utf-8 -*-
> import multiprocessing as mp
> import time
> import sys
> import os
> #from asterisk.agi import AGI
> #agi = AGI()
> def f(name):
> os.close(0) # close C's stdin stream
> os.close(1) # close C's stdout stream
> os.close(2) # close C's stderr stream
> f = open('/var/lib/asterisk/agi-bin/tns/testing/testout.txt', 'w')
> if __name__ == '__main__':
> print('before process')
> q = mp.Queue()
> p = mp.Process(target=f, args=('asterisk',))
> On 30 June 2017 at 19:59, J Montoya or A J Stiles
> <asterisk_list at earthshod.co.uk> wrote:
>> On Friday 30 Jun 2017, Jonathan H wrote:
>>> What's the simplest, easiest quickest least-code way of firing off an AGI
>>> with some variable, and then returning to the dialplan?
>> You have to use the "fork" command. This starts a copy of the process with
>> all the same internal state including variables and filehandles. The command
>> returns a non-zero value (which is the PID of the child process; you may need
>> this, if you plan to outlive your children and have to clear their entries
>> from the process table) to the parent process, and zero to the child process.
>> So in the parent, you exit and return to the dialplan; and in the child, you
>> close STDIN, STDOUT and STDERR (so no process is waiting for you to produce
>> output), then just take your time doing what you have to. The parent is
>> already long dead by this time, so exiting goes nowhere.
>>> I've seen people talking about fastAGI, stasis, python ASYNC... all seems
>>> rather complicated. I feel I must be missing something embarrassingly
>>> obvious - isn't there just the equivalent of the unix shell's "&"?!
>> Yes, fork! That is what the "&" operator is using "under the bonnet".
>> Note: Originating address only accepts e-mail from list! If replying off-
>> list, change address to asterisk1list at earthshod dot co dot uk .
>> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>> Check out the new Asterisk community forum at: https://community.asterisk.org/
>> New to Asterisk? Start here:
>> asterisk-users mailing list
>> To UNSUBSCRIBE or update options visit:
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
> Check out the new Asterisk community forum at: https://community.asterisk.org/
> New to Asterisk? Start here:
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
More information about the asterisk-users