含代码 join()所完成的工作就是线程同步,即主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程在终止。 设置守护线程时,主线程一旦执行结束,则将杀死子线程。不设置时,主线程结束,子线程依然可以继续执行。
若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。
启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行: 多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量。 要给change_it()(函数)上一把锁,当某个线程开始执行change_it()时,我们说,该线程因为获得了锁,因此其他线程不能同时执行change_it(),只能等待,直到锁被释放后,获得该锁以后才能改。 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步,这两个对象都有 acquire 方法和 release 方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到 acquire 和 release 方法之间。 由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对方持有的锁时,可能会造成死锁,导致多个线程全部挂起,既不能执行,也无法结束,只能靠操作系统强制终止。
添加一个计数器功能,来限制一个时间点内的线程数量。 计数器不能小于0,当计数器为0时,acquire()将阻塞线程直到其他线程调用release()。Semaphore用于控制进入数量的锁,控制同时进行的线程,内部是基于Condition来进行实现的 https://www.cnblogs.com/callyblog/p/11147456.html
创建的是一个线程,实现延迟一段时间重复调用函数。 https://www.pynote.net/archives/1783
queue中的put/get , put_nowait/get_nowait,https://blog.csdn.net/qq_32446743/article/details/80067013
