igraph-help
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [igraph] igraph/C: is there a facility for interrupting computations


From: Tamas Nepusz
Subject: Re: [igraph] igraph/C: is there a facility for interrupting computations?
Date: Sat, 29 Aug 2015 23:03:58 +0200

Hi Szabolcs,

Not all igraph routines support interruptions, but those that do call
a macro named IGRAPH_ALLOW_INTERRUPTION() at regular intervals. This
macro will in turn call a so-called interruption handler, which you
can set with the igraph_set_interruption_handler() function (see
https://github.com/igraph/igraph/blob/master/src/interrupt.c). Within
the interruption handler, you must check whether the host environment
(Mathematica in your case) has signalled that the user wishes to
interrupt the computation. (For instance, in Python, I call the
PyErr_CheckSignals() function here). If the user wishes to interrupt
the computation, you must call IGRAPH_FINALLY_FREE() and then return
IGRAPH_INTERRUPTED; otherwise return IGRAPH_SUCCESS. See the Python
interface for an example:

https://github.com/igraph/python-igraph/blob/master/src/igraphmodule.c#L147

I'm not sure how this translates to Mathematica - ideally, Mathematica
should have some kind of an internal flag that is set when the user
wishes to interrupt the computation. Your task would be to check this
flag whenever the interrupt handler is called.

T.

T.


On Sat, Aug 29, 2015 at 10:28 PM, Szabolcs Horvát <address@hidden> wrote:
> Dear All,
>
> Does the C interface to igraph have any facility for
> aborting/interrupting computations that take very long?
>
> I assume it does because interrupting is possible with igraph/R.  E.g.
> the following takes a long time:
>
> rewire(erdos.renyi.game(1000, 0.5, 'gnp'), keeping_degseq(niter=10000000))
>
> But pressing the stop button in R cancels it without killing the R session.
>
> How is this implemented?
>
> So far I tried setting a status handler as follows:
>
> int igStatusHandler(const char *, void *) { return IGRAPH_INTERRUPTED; }
>
> igraph_set_status_handler(igStatusHandler);
>
> But igraph_rewire() still runs to the finish without interruption.
>
> Use case: I am working on a (partial) Mathematica interface and the
> ability to interrupt would be a big usability improvement.  I was
> using igraph through the R interface from Mathematica before
> (https://github.com/szhorvat/IGraphR) but that has its limitations.
>
> Szabolcs
>
> _______________________________________________
> igraph-help mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/igraph-help



reply via email to

[Prev in Thread] Current Thread [Next in Thread]