I have an algorithm that I need to speed up.
I would like to parallelize computations 
 this gives as output three values b1, b2, b3 that are global and for any input check2 can either leave them unchanged or increase them by 1.
I tried looking into @parallel but it doens't seem to fit my requirements.
  P2=[]                                              
def P_2(q,n,S):     %creates the set P2
I2R=[]  
I2S=[]
I3=[]
I3R=[]
I6=[]
I8=[]
def IG(k):      %creates a set of indeces vectors
def coll(x,y,z):    %checks if 3 given tuples are collinear
    A=[x,y,z]
    M = matrix(A)
    if M.determinant()==0:
         return 'true'                                             
def cone(v):     %defines a function to be used in conic()
def conic(x1,x2,x3,x4,x5,x6):    %checks if 6 given tuples are on a conic
A=[cone(x1),cone(x2),cone(x3),cone(x4),cone(x5),cone(x6)]
M = matrix(A)
if M.determinant()==0:
    return 'true'                              
def cube(v):     %defines a function to be used in SIcubic()                    
def dxcube(v):     %defines a function to be used in SIcubic()      
def dycube(v):         %defines a function to be used in SIcubic()      
def dzcube(v):       %defines a function to be used in SIcubic()      
def SIcubic(x1,x2,x3,x4,x5,x6,x7,x8):      %checks if 8 given tuples are on a special cubic
    v1='false'
    v=[x1,x2,x3,x4,x5,x6,x7,x8]
    for a in range(8):
        x=v[a]
        A=[]
        A.append(dxcube(x))
        A.append(dycube(x))
        A.append(dzcube(x))
        for t in range(8):
         if t!=a:
           y=v[t]
           A.append(cube(y))      
        M = matrix(A)
        if M.determinant()==0:
             v1='true'   
    return v1         
b1=0  
b2=0
b3=0  
def check(s,k):       %checks a vector s of lenght k
        global b1
        global b2
        global b3
        IG(k)
        q1=0
        q2=0
        q3=0
        for i3 in I3:
                a0=i3[0]
                a1=i3[1]
                a2=i3[2]
                if coll(s[a0],s[a1],s[a2])=='true':
                        q1=1
                        q2=1
                        q3=1
                        break  
        if q2==0:     
         if k>5:         
          if q==0:
            for i6 in I6:
                a0=i6[0]
                a1=i6[1]
                a2=i6[2]
                a3=i6[3]
                a4=i6[4]
                a5=i6[5]
                if conic(s[a0],s[a1],s[a2],s[a3],s[a4],s[a5])=='true':
                        q2=1
                        q3=1
                        break
        if q3==0:
         if k>7:
          for i8 in I8:
            a0=i8[0]
            a1=i8[1]
            a2=i8[2]
            a3=i8[3]
            a4=i8[4]
            a5=i8[5]
            a6=i8[6]
            a7=i8[7]
            if SIcubic(s[a0],s[a1],s[a2],s[a3],s[a4],s[a5],s[a6],s[a7])=='true':
                 q3=1
                 break          
        b1=b1+q1
        b2=b2+q2
        b3=b3+q3
        return b1
        return b2
        return b3
b1=0    
def check1(s,a):     %checks a vector s and an element a
        global b1
        q1=0
        for i2 in I2S:
                a0=i2[0]
                a1=i2[1]
                if coll(s[a0],s[a1],a)=='true':
                        q1=1
                        break
        b1=b1+q1
        return b1
b1=0    
b2=0  
b3=0  
def check2(s,k):    %checks a vector s of lenght k
        global b1
        global b2
        global b3
        q1=0
        q2=0
        q3=0
        for i3 in I3R:
                a0=i3[0]
                a1=i3[1]
                a2=i3[2]
                if coll(s[a0],s[a1],s[a2])=='true':
                        q1=1
                        q2=1
                        q3=1
                        break         
        if q2==0:         
          if k>5:
            for i6 in I6:
                a0=i6[0]
                a1=i6[1]
                a2=i6[2]
                a3=i6[3]
                a4=i6[4]
                a5=i6[5]
                if conic(s[a0],s[a1],s[a2],s[a3],s[a4],s[a5])=='true':
                        q2=1
                        q3=1
                        break
        if q3==0:
         if k>7: 
          for i8 in I8:
            a0=i8[0]
            a1=i8[1]
            a2=i8[2]
            a3=i8[3]
            a4=i8[4]
            a5=i8[5]
            a6=i8[6]
            a7=i8[7]
            if SIcubic(s[a0],s[a1],s[a2],s[a3],s[a4],s[a5],s[a6],s[a7])=='true':
                 q3=1
                 break
        b1=b1+q1
        b2=b2+q2
        b3=b3+q3
        return b1
        return b2
        return b3 
t=1
def TOT(P,q,n,k):      %computes a polynomial depending on q,n,k,P
def fuse(s,t):        %fuses two vectors into 1 (see repsonse to answere)
sn=[]
def Count(S,q,n,k):     %main function
    IG(k)
    global b1
    global b2
    global b3
    l1=0
    l2=0
    l3=0
    y=q^n
    s=len(S)
    v=[(0,0,1),(0,1,0),(1,0,0),(1,1,1)]
    V1=copy(S)
    V1.remove((1,0,0))
    V1.remove((0,1,0))
    V1.remove((0,0,1))
    V1.remove((1,1,1))
    if k<4:
      b1=0
      for s in Subsets(S,k):
          check(s,k)
      l1=b1*factorial(k)
    if k>4:
      V2=copy(V1)
      for r1 in V1:
          b1=0
          b2=0
          b3=0
          check1(v,r1)
          if b1==1:
             V2.remove(r1)
      s2=len(V2)
      l1=l1+binomial(s-4,k-4)-binomial(s2,k-4)
      l2=l2+binomial(s-4,k-4)-binomial(s2,k-4)
      l3=l3+binomial(s-4,k-4)-binomial(s2,k-4)
      b1=0
      b2=0
      b3=0
      for r2 in Subsets(V2,k-4):
             check2(fuse(v,r2),k)   
      l1=l1+b1 
      l2=l2+b2   
      l3=l3+b3      
      l1=l1*(y^2+y+1)*(y^3-y)*(y^3-y^2)*factorial(k-4)
      l2=l2*(y^2+y+1)*(y^3-y)*(y^3-y^2)*factorial(k-4)
      l3=l3*(y^2+y+1)*(y^3-y)*(y^3-y^2)*factorial(k-4)
    g1=t-l1
    g2=t-l2
    g3=t-l3
    print('There are ', g1/factorial(k) , ' unordered', k,'-tuples in general linear position')
    print('There are ', g1 , ' ordered', k ,'-tuples in general linear position')
    print('There are ', g2/factorial(k) , ' unordered', k,'-tuples in general linear and conic position')
    print('There are ', g2 , ' ordered', k ,'-tuples in general linear and conic position')
    print('There are ', g3/factorial(k) , ' unordered', k,'-tuples in general position')
    print('There are ', g3 , ' ordered', k ,'-tuples in general position')
 def Active(q,n,k):        %every fucntion I need to run reduced into 1
        P2=[]
        P_2(q,n,P2)
        TOT(P2,q,n,k)
        Count(P2,q,n,k)