I am using this code:
def startThreads(arrayofkeywords):
global i
i = 0
while len(arrayofkeywords):
try:
if i<maxThreads:
keyword = arrayofkeywords.pop(0)
i = i+1
thread = doStuffWith(keyword)
thread.start()
except KeyboardInterrupt:
sys.exit()
thread.join()
for threading in python, I have almost everything done, but I dont know how to manage the results of each thread, on each thread I have an array of strings as result, how can I join all those arrays into one safely? Because, I if I try writing into a global array, two threads could be writing at the same time.
First, you actually need to save all those
threadobjects to calljoin()on them. As written, you’re saving only the last one of them, and then only if there isn’t an exception.An easy way to do multithreaded programming is to give each thread all the data it needs to run, and then have it not write to anything outside that working set. If all threads follow that guideline, their writes will not interfere with each other. Then, once a thread has finished, have the main thread only aggregate the results into a global array. This is know as “fork/join parallelism.”
If you subclass the Thread object, you can give it space to store that return value without interfering with other threads. Then you can do something like this:
Edit:
After looking around a bit, it seems like the above method isn’t the preferred way to do threads in Python. The above is more of a Java-esque pattern for threads. Instead you could do something like: