Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Synchronously evaluate an expression in a separate kernel
ResourceFunction["LocalEvaluate"][expr] evaluates expr in a separate kernel and returns the result. | |
ResourceFunction["LocalEvaluate"][expr,wrapper] wraps the head wrapper around the result before returning it. |
| "TaskStarted" | task is started |
| "FailureOccurred" | task could not be started |
| "ScheduleTriggered" | scheduled task evaluation is beginning |
| "MessageGenerated" | evaluation generated a message |
| "PrintOutputGenerated" | evaluation generated print output |
| "ResultReceived" | evaluation generated a result |
| "ScheduleExecuted" | scheduled task evaluation is executed |
| "TaskStatusChanged" | task status changed |
| "TaskRemoved" | task is being removed |
| HandlerFunctions | <||> | how to handle generated events |
| HandlerFunctionsKeys | Automatic | parameters to supply to handler functions |
| IncludeDefinitions | True | whether to include any dependent definitions |
| "ReturnDefinitions" | False | whether to send dependent definitions from the subkernel back to the parent kernel |
| Initialization | None | an expression to be evaluated as part of the kernel initialization |
| Asynchronous | False | whether to return a TaskObject instead of waiting for results |
| Method | Automatic | details of serialization methods to use |
| PerformanceGoal | Automatic | aspects of performance to try to optimize |
| "Speed" | optimize for serialization and deserialization speed |
| "Size" | optimize for size of data to be transferred |
| Automatic | automatically pick serialization strategy |
| {typespec1→enc1,…} | specify encodings for particular types |
| Automatic | pick encodings automatically based on data |
| "PackedArrayIntegerType" | integer packed arrays |
| "PackedArrayRealType" | real-valued packed arrays |
| "PackedArrayComplexType" | complex-valued packed arrays |
Run an evaluation in a separate kernel:
| In[1]:= |
| Out[1]= |
Compare to the current kernel:
| In[2]:= |
| Out[2]= |
Supply a head to be applied to the results of a local evaluation:
| In[3]:= |
| Out[3]= |
By default, definitions are included:
| In[4]:= |
| Out[2]= |
Do not include any definitions in the evaluation:
| In[5]:= |
| Out[5]= |
By default, definitions created on the subkernel are not returned to the current kernel session:
| In[6]:= |
| Out[2]= |
| In[7]:= |
| Out[7]= |
Return dependent definitions to the parent kernel for the output expression:
| In[8]:= |
| Out[2]= |
Now the definition of g is returned from the subkernel:
| In[9]:= |
| Out[9]= |
Only the definitions that the output depends on will be returned:
| In[10]:= |
| Out[2]= |
Since the output does not depend on f, its definition is not returned to the current session:
| In[11]:= |
| Out[11]= |
Compare to g, which appears in the output literally:
| In[12]:= |
| Out[12]= |
Specify an initialization that should evaluate first:
| In[13]:= |
| Out[13]= |
The initialization only runs on the other kernel; the current kernel is not affected:
| In[14]:= |
| Out[14]= |
Create a temporary init.m file and back up the original:
| In[15]:= |
| Out[16]= |
| In[17]:= |
Using Automatic for Initialization is equivalent to using Get[FindFile["init.m"]]:
| In[18]:= |
| Out[18]= |
The symbol h is undefined otherwise:
| In[19]:= |
| Out[19]= |
Restore the original init.m file:
| In[20]:= |
| Out[20]= |
Create a large packed array of integers:
| In[21]:= |
Pass a Method specification to the WXF serialization when sending expressions between kernels:
| In[22]:= | ![]() |
| Out[22]= |
Use a smaller type to reduce transfer time:
| In[23]:= | ![]() |
| Out[23]= |
By default, the smallest type that fits the data will be used:
| In[24]:= |
| Out[24]= |
Compare the size difference by using BinarySerialize:
| In[25]:= |
| Out[25]= | ![]() |
| In[26]:= |
| Out[26]= | ![]() |
By default, LocalEvaluate waits for results to be returned:
| In[27]:= |
| Out[27]= |
Set Asynchronous to True if you don't need to wait for results:
| In[28]:= |
| Out[28]= | ![]() |
This is effectively equivalent to LocalSubmit when no definitions or initialization specifications are involved:
| In[29]:= |
| Out[29]= | ![]() |
| In[30]:= | ![]() |
| Out[30]= | ![]() |
Discover symbols in a package without loading it in the current kernel:
| In[31]:= |
| Out[31]= | ![]() |
The current kernel is unaffected:
| In[32]:= |
| Out[32]= |
Check how many symbols have been created in your current session that are not created by default:
| In[33]:= |
| Out[33]= |
Manipulate notebooks with a hidden front end:
| In[34]:= | ![]() |
| Out[34]= | ![]() |
Each evaluation of LocalEvaluate runs in a new kernel:
| In[35]:= |
| Out[35]= |
| In[36]:= |
| Out[36]= |
Compare to the current kernel:
| In[37]:= |
| Out[37]= |
Similar behavior to LocalEvaluate can be obtained by using TaskWait with LocalSubmit:
| In[38]:= | ![]() |
| Out[38]= |
LocalEvaluate can often have better performance than LocalSubmit when sending/receiving large amounts of data:
| In[39]:= |
| Out[32]= |
| In[40]:= | ![]() |
| Out[24]= |
| In[41]:= |
| Out[26]= |
| In[42]:= |
| Out[42]= |
Messages that are issued in the separate kernel are not printed in the current session:
| In[43]:= |
| Out[43]= |
| In[44]:= |
| Out[44]= |
Use HandlerFunctions to handle messages:
| In[45]:= |
| Out[45]= |
Wolfram Language 11.3 (March 2018) or above
This work is licensed under a Creative Commons Attribution 4.0 International License