Hi everyone! I’m fairly new to MaxScript and interested - is it possible to call a MaxScript which uses BackgroundWorkers from Python by passing it’s body to MaxPlus.Core.EvalMAXScript and get a response which is assembled when all background workers are completed their tasks?
Now i’m in a situation where i on Python side just getting an empty response immediately and see in Listener that threads continue to execute. I need to somehow wait while RESULTS will be populated by BackgroundWorkers.
Here is my script:
gc() CPU_COUNT = sysInfo.cpucount HANDLES = #(1,3,4,7,9) RESULTS = #() RUNNING_THREADS = #() fn dispatch_handles = ( for i = 1 to CPU_COUNT do ( RESULTS[i] = #() ) DISPATCHED_HANDLES = for i = 1 to CPU_COUNT collect ( for j = i to HANDLES.count by CPU_COUNT collect HANDLES[j] ) ) fn task handle = ( format "Exec task % \n" handle sleep handle format "Woken up % \n" handle handle * 2 ) fn wrk self eargs= ( for handle in DISPATCHED_HANDLES[eargs.Argument as integer] do ( result = task handle append RESULTS[eargs.Argument as integer] result ) deleteItem RUNNING_THREADS (findItem RUNNING_THREADS self) ) fn wrk_done = ( print "WRK DONE" if RUNNING_THREADS.count == 0 then ( print "ALL THREADS COMPLETED" print RESULTS ) ) dispatch_handles() for i=1 to CPU_COUNT do ( thread = DotNetObject "CSharpUtilities.SynchronizingBackgroundWorker" DotNet.AddEventHandler thread "DoWork" wrk DotNet.addEventHandler thread "RunWorkerCompleted" wrk_done append RUNNING_THREADS thread thread.RunWorkerAsync(id=i) ) print RESULTS