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