[asterisk-users] Simplest way of executing a non-blocking (async) python AGI script?

Jonathan H lardconcepts at gmail.com
Fri Jun 30 16:23:44 CDT 2017

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:
>       https://wiki.asterisk.org/wiki/display/AST/Getting+Started
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-users

More information about the asterisk-users mailing list