def threadArr(num,func,arr,**kwargs):
import threading,sys
from myfunkr import splitArr
type = sys.getfilesystemencoding()
splitArrResult = splitArr(arr, num)
print '多线程开始...'.decode('utf-8').encode(type)
threadArr = []
for i in range(num):
#*args是接收任意多的参数变量 也可以没有 获取到的是一个数组
t = threading.Thread(target=func, args=(splitArrResult[i], kwargs))
threadArr.append(t)
for x in threadArr:
x.start()
# 有join 可以等上面都执行完了再继续主线程
x.join()
print '多线程结束...'.decode('utf-8').encode(type)
def func(arr,kwargs):
for aa in arr:
threadLock.acquire()
print aa,kwargs['key1'],kwargs['key2']
threadLock.release()
if __name__=='__main__':
arr=range(100)
import threading
threadLock = threading.Lock()
#threadArr(20,func,arr,**{'key1':'value1','key2':'value2'})
kwother={'key1':'value1','key2':'value2'}
#func(arr,**kwother)
threadArr(20,func,arr,**kwother)
运行结果:
1 value1 value2
2 value1 value2
3 value1 value2
4 value1 value2
5 value1 value2
6 value1 value2
10 value1 value2
7 value1 value2
......
函数func的参数kwargs是一个可变关键字参数 调用时要注意
锁要在主进程那边先调用 之后在函数里面使用才可以
网友评论