python线程的使用:
# 使用线程必要添加的模块 threadingimport threading# 提供一个线程的起始位置(线程回调函数)def worker():for i in range(1000):# 循环输出一千次线程名称(创建线程指定)# 在 Python 中线程由 pvm 维护,是伪线程print(i, threading.current_thread().name)# 如果当前的模块是主模块就执行if __name__ == "__main__":# 创建了一个线程对象,指定起始位置和名称t = threading.Thread(target=worker, name="worker")# 执行线程t.start()# 输出主线程的名称,应该和线程的输出是交替的for i in range(1000):print(i, threading.current_thread().name)# 主线程等待线程执行完毕t.join()import time# 使用线程模块中提供的锁 Locklock = threading.Lock()# 提供一个线程的起始位置(线程回调函数)def worker():for i in range(1000):# 将需要保护的代码添加到 acquire 和 release 中间time.sleep(0.1)lock.acquire()print(i, threading.current_thread().name)lock.release()# 如果当前的模块是主模块就执行if __name__ == "__main__":# 创建了一个线程对象,并直接执行threading.Thread(target=worker, name="worker").start()# 输出主线程的名称,应该和线程的输出是交替的for i in range(1000):time.sleep(0.1)lock.acquire()print(i, threading.current_thread().name)lock.release()# 一个变参函数,接收的数据被打包成元组def worker_thread1(*args):print(type(args), args)# 一个变参函数,接收的数据被打包成字典def worker_thread2(**kwargs):print(type(kwargs), kwargs)# 可以传入元组和键值对def worker_thread3(*args, **kwargs):print(type(args), args)print(type(kwargs), kwargs)# 创建线程,传入多个参数threading.Thread(target=worker_thread1, args=(1, 2, 3)).start()# 传递字典到线程回调函数中时,键应该是一个字符串threading.Thread(target=worker_thread2, kwargs={"a":1, "b": 2}).start()threading.Thread(target=worker_thread3, args=(1, 2, 3), kwargs={"a":1, "b": 2}).start()# 在 Python 中不建议使用递归,函数的递归有一定的次数限制,大概是 1000# 因为 Python 执行在 pvm 中,效率不够高,不推荐递归
