Queues are threadsafe. So you should be able to get away with two queues, to be shared between all your threads:
from threading import Thread
from multiprocessing import Queue
def func1(x):
return [i*i for i in x]
nums = [1,2,3,4,5,112,32,53,64,25]
def wrapper(func, qIn, qOut):
for arg in iter(qIn.get, None):
qOut.put(func(arg))
qIn, qOut = Queue(), Queue()
chunksize = len(nums)/numThreads
for i in xrange(numThreads):
qIn.put(nums[i*chunksize : (i+1)*chunksize])
numThreads = 2 # or N
for _ in xrange(numThreads):
qIn.put(None)
for _ in xrange(numThreads):
Thread(target=wrapper, args=(func1, qIn, qOut)).start()
for _ in xrange(numThreads):
print qOut.get()