Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
Hi all. I have read some very old posts about multi threading in python, and I can't understand squat. Would it be possible for someone to post a simple example on how to write a script that is multithreaded and does the following:
Is that even possible? Thanks
Hello an welcome to the PluginCafe.
Please always add tags to your posts to help the community to organize the forum's content. You can also mark your post as a question using the Q&A system. See Read Before Posting.
I assume you are using Cinema 4D R20?
Notice that a script is - well - a script. A script is started, executes some command and then finishes. While doing so, Cinema 4D will be blocked. You can use threads to distribute the work done in the script but the script will keep blocking Cinema while doing so.
You find all components related to threading in the c4d.threading module.
The number of threads that should be used can be obtained with GeGetCurrentThreadCount().
A custom thread is based on C4DThread. Such a custom thread can receive, process and return data. Data can be stored as member variables and accessed using custom functions. The Main() function of the thread contains the code that is executed when the thread is running.
from c4d import threading class MyThread(c4d.threading.C4DThread): # input data data = [] # output data results = [] # set data def SetData(self, arguments): self.data = arguments # process data def Main(self): # multiply each item with 2 and store results for item in self.data: item = item * 2 self.results.append(item) # return results def GetResults(self): return self.results
A new thread is created by creating an instance of the thread class. A thread is started using Start(). You can wait for the thread to finish using Wait().
# create thread thread = MyThread() # prepare input data data = [] data.append(1) data.append(2) data.append(3) # set input data thread.SetData(data) # start thread and wait thread.Start() thread.Wait(False) # get results results = thread.GetResults()
If you want to run multiple thread, you have to start these threads an then wait in a loop for all threads to finish (IsRunning()).
Creating a list with items and splitting that into segments is just basic programming.
best wishes, Sebastian
I have a script that takes 5 hours to do something I wouldn't mind it taking 5 hours / 12
Thank you for the information. I'll put it to good use... and let you know when I fail!