[ 
https://issues.apache.org/jira/browse/ARROW-11841?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17565165#comment-17565165
 ] 

Weston Pace commented on ARROW-11841:
-------------------------------------

{quote}Can the RunInSerialExecutor do something like setTimeout (i.e., schedule 
something for execution later)? If so, that could just do 
cpp11::check_user_interrupt(), set the C++ stop token if an interrupt has been 
requested, and schedule itself to run in a few seconds otherwise?
{quote}

That's not supported today but, it should be possible, and it seems like a 
pretty good way to solve this problem.  One challenge is that we want to make 
sure to let cleanup happen (e.g. tasks that close file handles).  However, 
there might be some middle ground here.  {{RunInSerialExecutor}}, when it 
decides a timeout has occurred, could mark a StopSource as cancelled.  We would 
not need to override stop token in that case.

> [R][C++] Allow cancelling long-running commands
> -----------------------------------------------
>
>                 Key: ARROW-11841
>                 URL: https://issues.apache.org/jira/browse/ARROW-11841
>             Project: Apache Arrow
>          Issue Type: Improvement
>          Components: C++, R
>            Reporter: Antoine Pitrou
>            Priority: Major
>             Fix For: 10.0.0
>
>
> When calling a long-running task (for example reading a CSV file) from the R 
> prompt, users may want to interrupt with Ctrl-C.
> Allowing this will require integrating R's user interruption facility with 
> the cancellation API that's going to be exposed in C++ (see  ARROW-8732).
> Below some information I've gathered on the topic:
> There is some hairy discussion of how to interrupt C++ code from R at 
> https://stackoverflow.com/questions/40563522/r-how-to-write-interruptible-c-function-and-recover-partial-results
>  and https://stat.ethz.ch/pipermail/r-devel/2011-April/060714.html .
> It seems it may involve polling cpp11::check_user_interrupt() and catching 
> any cpp11::unwind_exception that may signal an interruption. A complication 
> is that apparently R APIs should only be called from the main thread. There's 
> also a small library which claims to make writing all this easier: 
> https://github.com/tnagler/RcppThread/blob/master/inst/include/RcppThread/RMonitor.hpp
> But since user interruptions will only be noticed by the R main thread, the 
> solution may be to launch heavy computations (e.g. CSV reading) in a separate 
> thread and have the main R thread periodically poll for interrupts while 
> waiting for the separate thread. This is what this dedicated thread class 
> does in its join method: 
> https://github.com/tnagler/RcppThread/blob/master/inst/include/RcppThread/Thread.hpp#L79



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to