def worker(chosenNum):
    print("Current chosen number: ", chosenNum)
#    global validateX, validateY, trainX, trainY, regs, xis, lock, clfs
    clf = GLS()
    hda = HighDimAlg(clf, "convolve")       
    hda.setWidth(28)
    hda.setKernels([(2,2), (4,4), (7,7)])
    
    target = validateY.copy()
    target[target == chosenNum] = 999
    target[target != 999] = 0
    target[target == 999] = 1
    
    bestScore, bestXi, bestReg = 1e10, None, None 
    
    for xi in xis:
        hda.setXi(xi)
        score, reg = Util.crossValidate(hda, validateX, target, \
                                        Util.brierScore, 2, "Regular", regs)
        if score < bestScore:
            bestScore, bestXi, bestReg = score, xi, reg
    print("bestScore, bestXi, bestReg = ", bestScore, bestXi, bestReg)
    hda.setXi(bestXi)
    hda.setRegular(bestReg)
    
    target = trainY.copy()
    target[target == chosenNum] = 999
    target[target != 999] = 0
    target[target == 999] = 1
    hda.fit(trainX, target)
    
    res = {}
    res['num'] = chosenNum
    res['clf'] = hda
    res['validateScore'] = bestScore
    lock.acquire()
    try:
        clfs.append(res)
    finally:
        lock.release()