How to plot (or update) a matplot figure and continue python code immediately (don't wait for the plot)?
<p>I am trying to write python code that continuously gets data from machine and plots these data in a figure window. I am using matplotlib with interactive plotting enabled / ion().</p>

<p>There is quite a bit of data, so plotting may take a while. Since the python code does not continue until the plot is updated, data acquisition is stopped while the plot updated.</p>

<p>I'd like to avoid the data gaps resulting from the updating of the plots. Is there a (simple and reliable) way to update the figure/plot without blocking the execution of the code until the plot is updated on screen?</p>

<p>EDIT 23.9.2015:</p>

<p>I tried threading as suggested below. I put this in a script:</p>

<pre><code>import threading
import matplotlib.pyplot as plt

def plotter():
    print 'Starting plot...'
    plt.plot([1,2,3,4])
    plt.show()
    print '...plot done.'
    return

t = threading.Thread(target=plotter)
t.start()
</code></pre>

<p>Executing this script results in a crash (Mac OS X with Python 2.7 from MacPorts; see below). The script works smoothly and as expected if I comment out plt.plot(...) and plt.show(). Any help or suggestions what's wrong?</p>

<pre><code>$ python plot_in_own_thread.py 
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
Starting plot...
2016-09-23 08:43:19.433 Python[89176:39798237] *** Assertion failure in +[NSUndoManager _endTopLevelGroupings], /Library/Caches/com.apple.xbs/Sources/Foundation/Foundation-1259/Misc.subproj/NSUndoManager.m:359
2016-09-23 08:43:19.433 Python[89176:39798237] +[NSUndoManager(NSInternal) _endTopLevelGroupings] is only safe to invoke on the main thread.
2016-09-23 08:43:19.435 Python[89176:39798237] (
    0   CoreFoundation                      0x00007fff8cbb14f2 __exceptionPreprocess + 178
    1   libobjc.A.dylib                     0x00007fff9f7ab73c objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff8cbb61ca +[NSException raise:format:arguments:] + 106
    3   Foundation                          0x00007fff9ba2d856 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
    4   Foundation                          0x00007fff9b9b2af1 +[NSUndoManager(NSPrivate) _endTopLevelGroupings] + 170
    5   AppKit                              0x00007fff98061e22 -[NSApplication run] + 844
    6   _macosx.so                          0x000000010d3494a2 show + 210
    7   Python                              0x000000010aff2539 PyEval_EvalFrameEx + 27929
    8   Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    9   Python                              0x000000010aff6e36 fast_function + 118
    10  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    11  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    12  Python                              0x000000010af771cc function_call + 364
    13  Python                              0x000000010af514c3 PyObject_Call + 99
    14  Python                              0x000000010af5e526 instancemethod_call + 182
    15  Python                              0x000000010af514c3 PyObject_Call + 99
    16  Python                              0x000000010afac5fb slot_tp_call + 171
    17  Python                              0x000000010af514c3 PyObject_Call + 99
    18  Python                              0x000000010aff2c8c PyEval_EvalFrameEx + 29804
    19  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    20  Python                              0x000000010aff6e36 fast_function + 118
    21  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    22  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    23  Python                              0x000000010af771cc function_call + 364
    24  Python                              0x000000010af514c3 PyObject_Call + 99
    25  Python                              0x000000010aff2c8c PyEval_EvalFrameEx + 29804
    26  Python                              0x000000010aff6f16 fast_function + 342
    27  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    28  Python                              0x000000010aff6f16 fast_function + 342
    29  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    30  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    31  Python                              0x000000010af771cc function_call + 364
    32  Python                              0x000000010af514c3 PyObject_Call + 99
    33  Python                              0x000000010af5e526 instancemethod_call + 182
    34  Python                              0x000000010af514c3 PyObject_Call + 99
    35  Python                              0x000000010aff68b5 PyEval_CallObjectWithKeywords + 165
    36  Python                              0x000000010b030cb6 t_bootstrap + 70
    37  libsystem_pthread.dylib             0x00007fff9b92b99d _pthread_body + 131
    38  libsystem_pthread.dylib             0x00007fff9b92b91a _pthread_body + 0
    39  libsystem_pthread.dylib             0x00007fff9b929351 thread_start + 13
)
2016-09-23 08:43:19.436 Python[89176:39798237] *** Assertion failure in +[NSUndoManager _endTopLevelGroupings], /Library/Caches/com.apple.xbs/Sources/Foundation/Foundation-1259/Misc.subproj/NSUndoManager.m:359
2016-09-23 08:43:19.438 Python[89176:39798237] An uncaught exception was raised
2016-09-23 08:43:19.438 Python[89176:39798237] +[NSUndoManager(NSInternal) _endTopLevelGroupings] is only safe to invoke on the main thread.
2016-09-23 08:43:19.438 Python[89176:39798237] (
    0   CoreFoundation                      0x00007fff8cbb14f2 __exceptionPreprocess + 178
    1   libobjc.A.dylib                     0x00007fff9f7ab73c objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff8cbb61ca +[NSException raise:format:arguments:] + 106
    3   Foundation                          0x00007fff9ba2d856 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
    4   Foundation                          0x00007fff9b9b2af1 +[NSUndoManager(NSPrivate) _endTopLevelGroupings] + 170
    5   AppKit                              0x00007fff98061ebe -[NSApplication run] + 1000
    6   _macosx.so                          0x000000010d3494a2 show + 210
    7   Python                              0x000000010aff2539 PyEval_EvalFrameEx + 27929
    8   Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    9   Python                              0x000000010aff6e36 fast_function + 118
    10  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    11  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    12  Python                              0x000000010af771cc function_call + 364
    13  Python                              0x000000010af514c3 PyObject_Call + 99
    14  Python                              0x000000010af5e526 instancemethod_call + 182
    15  Python                              0x000000010af514c3 PyObject_Call + 99
    16  Python                              0x000000010afac5fb slot_tp_call + 171
    17  Python                              0x000000010af514c3 PyObject_Call + 99
    18  Python                              0x000000010aff2c8c PyEval_EvalFrameEx + 29804
    19  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    20  Python                              0x000000010aff6e36 fast_function + 118
    21  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    22  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    23  Python                              0x000000010af771cc function_call + 364
    24  Python                              0x000000010af514c3 PyObject_Call + 99
    25  Python                              0x000000010aff2c8c PyEval_EvalFrameEx + 29804
    26  Python                              0x000000010aff6f16 fast_function + 342
    27  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    28  Python                              0x000000010aff6f16 fast_function + 342
    29  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    30  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    31  Python                              0x000000010af771cc function_call + 364
    32  Python                              0x000000010af514c3 PyObject_Call + 99
    33  Python                              0x000000010af5e526 instancemethod_call + 182
    34  Python                              0x000000010af514c3 PyObject_Call + 99
    35  Python                              0x000000010aff68b5 PyEval_CallObjectWithKeywords + 165
    36  Python                              0x000000010b030cb6 t_bootstrap + 70
    37  libsystem_pthread.dylib             0x00007fff9b92b99d _pthread_body + 131
    38  libsystem_pthread.dylib             0x00007fff9b92b91a _pthread_body + 0
    39  libsystem_pthread.dylib             0x00007fff9b929351 thread_start + 13
)
2016-09-23 08:43:19.438 Python[89176:39798237] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+[NSUndoManager(NSInternal) _endTopLevelGroupings] is only safe to invoke on the main thread.'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff8cbb14f2 __exceptionPreprocess + 178
    1   libobjc.A.dylib                     0x00007fff9f7ab73c objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff8cbb61ca +[NSException raise:format:arguments:] + 106
    3   Foundation                          0x00007fff9ba2d856 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
    4   Foundation                          0x00007fff9b9b2af1 +[NSUndoManager(NSPrivate) _endTopLevelGroupings] + 170
    5   AppKit                              0x00007fff98061ebe -[NSApplication run] + 1000
    6   _macosx.so                          0x000000010d3494a2 show + 210
    7   Python                              0x000000010aff2539 PyEval_EvalFrameEx + 27929
    8   Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    9   Python                              0x000000010aff6e36 fast_function + 118
    10  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    11  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    12  Python                              0x000000010af771cc function_call + 364
    13  Python                              0x000000010af514c3 PyObject_Call + 99
    14  Python                              0x000000010af5e526 instancemethod_call + 182
    15  Python                              0x000000010af514c3 PyObject_Call + 99
    16  Python                              0x000000010afac5fb slot_tp_call + 171
    17  Python                              0x000000010af514c3 PyObject_Call + 99
    18  Python                              0x000000010aff2c8c PyEval_EvalFrameEx + 29804
    19  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    20  Python                              0x000000010aff6e36 fast_function + 118
    21  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    22  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    23  Python                              0x000000010af771cc function_call + 364
    24  Python                              0x000000010af514c3 PyObject_Call + 99
    25  Python                              0x000000010aff2c8c PyEval_EvalFrameEx + 29804
    26  Python                              0x000000010aff6f16 fast_function + 342
    27  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    28  Python                              0x000000010aff6f16 fast_function + 342
    29  Python                              0x000000010aff23b8 PyEval_EvalFrameEx + 27544
    30  Python                              0x000000010afeb52a PyEval_EvalCodeEx + 1690
    31  Python                              0x000000010af771cc function_call + 364
    32  Python                              0x000000010af514c3 PyObject_Call + 99
    33  Python                              0x000000010af5e526 instancemethod_call + 182
    34  Python                              0x000000010af514c3 PyObject_Call + 99
    35  Python                              0x000000010aff68b5 PyEval_CallObjectWithKeywords + 165
    36  Python                              0x000000010b030cb6 t_bootstrap + 70
    37  libsystem_pthread.dylib             0x00007fff9b92b99d _pthread_body + 131
    38  libsystem_pthread.dylib             0x00007fff9b92b91a _pthread_body + 0
    39  libsystem_pthread.dylib             0x00007fff9b929351 thread_start + 13
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Abort trap: 6
</code></pre>

<p>You can use threading which will make it to run independently, see <a href="https://docs.python.org/3/library/threading.html" rel="nofollow">https://docs.python.org/3/library/threading.html</a> for more details</p>

python asynchronous matplotlib background blocking