I made a script based on your great example on parallel processing:
I am trying to project a bunch of points onto a mesh and wonder if you understand why I only get a 2.3x speed up on a machine with 12 cores/24 threads:
import rhinoscriptsyntax as rs import random import System.Threading.Tasks as tasks import time def PointsOnMesh(mesh): # DENSITY SETTING xNr = 200 bbox = rs.BoundingBox(mesh) xMultiplier = rs.Distance(bbox,bbox) yMultiplier = rs.Distance(bbox,bbox) points =  for i in range(xNr): for ii in range(xNr): point=rs.coerce3dpoint( (xMultiplier*random.random(),yMultiplier*random.random(), 0) ) point += bbox points.append(point) return points def ProjectPoints(parallel,points,mesh): time1=time.time() newPoints=[None]*len(points) def calculus(i): try: projection = rs.ProjectPointToMesh(points[i], mesh, (0,0,-1)) newPoints[i] = projection except: pass if parallel: tasks.Parallel.ForEach(xrange(len(points)), calculus) else: for i in range(len(points)): calculus(i) time2=time.time() rs.AddPointCloud(newPoints) return round(time2-time1,4) mesh = rs.GetObject("Mesh",rs.filter.mesh) single = None multi = None if mesh: points = PointsOnMesh(mesh) if points: single = ProjectPoints(False,points,mesh) if single: print "Single Core:",single multi = ProjectPoints(True,points,mesh) if multi: print "Multi Core:",multi if single and multi: print "MultiCore speed up:", round(single/multi,2),"X"
I made it with rs.ProjectPointToMesh() so the mesh isn’t a secured private copy.
Edit: You need a mesh in the document, I just used a Heightfieldfromimage and made a 200x200 mesh.
Edit II: Note: On your example I get a 11.5X speedup on a torus. So that seems to work much better.