python多线程threading示例

2019-10-27  本文已影响0人  pixyon
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是一个可变关键字参数 调用时要注意
锁要在主进程那边先调用 之后在函数里面使用才可以

上一篇 下一篇

猜你喜欢

热点阅读