I am testing the following code and I would like to make sure if it is correct:
from threading import Thread
import cPickle
def get_user(start, end):
    global users, vusers
    for j in range(start,end):
        if str(users[j]).find('@N') != -1:
            vusers.append(users[j])
if __name__ == '__main__':
    users = cPickle.load(open('nsid.dmp', 'r'))
    vusers = []
    jobs = [Thread(target=get_user, args=(0,1839))\
        ,Thread(target=get_user, args=(1840,3679))\
        ,Thread(target=get_user, args=(3680,5519))\
        ,Thread(target=get_user, args=(5520,7359))\
        ,Thread(target=get_user, args=(7360,9199))\
        ,Thread(target=get_user, args=(9200,11039))\
        ,Thread(target=get_user, args=(11040,12879))\
        ,Thread(target=get_user, args=(12880,14719))\
        ,Thread(target=get_user, args=(14720,16559))\
        ,Thread(target=get_user, args=(16560,18399))\
        ,Thread(target=get_user, args=(18400,20239))\
        ,Thread(target=get_user, args=(20240,20079))\
        ,Thread(target=get_user, args=(22080,23919))\
        ,Thread(target=get_user, args=(23920,25759))\
        ,Thread(target=get_user, args=(25760,27599))\
        ,Thread(target=get_user, args=(27600,29439))]
    for jb in jobs:
        jb.start()  
    for jb in jobs:
        jb.join()
    vusers = list(set(vusers))
    out = open('validu.dmp', 'w')
    cPickle.dump(vusers, out)
    out.close()
So what I am trying to do is to run in parallel the function get_user with different ranges. Of course, the function get_user is more complicated than that and there are many other conditions to check but when I ran the code I couldn't see that is more time efficient. Is there anything wrong in my code and is it the proper way to write multithreaded function? If not, how I can make it run in parallel?
 
     
     
    