How can I simulate a deadlock?
所有的死锁意味着一个或多个线程被阻止进行任何进度,因此您可以使用单个线程对其进行仿真.放一会儿True:睡一觉(10).
在实际情况下,通常会有两个线程同时阻止彼此进行进度.例如,也许他们以相反的顺序使用了一对锁,所以线程1直到获得锁2才释放锁1,但是线程2直到获得锁1才释放锁2.最好通过使两个线程永久阻塞来模拟它.
如果要实际创建死锁,最简单的方法是使线程在字面上相互阻塞:将thread2.join()添加到f1,将thread1.join()添加到f2.然后f1直到f2才完成,f2直到f1才完成,所以没有人可以完成.
但是,如果要创建现实的死锁,则几乎可以肯定要使用threading.Lock等同步对象来执行上述的两锁方案.
Also, how can I have each thread run after the other?
好吧,最简单的方法就是首先不要使用线程.但是,如果您确实想要,请执行以下操作:
thread1.start()
thread1.join()
thread2.start()
thread2.join()
thread3.start()
thread3.join()
Also can I list all the threads that are currently running in my script?
请参见threading.enumerate().通常,除调试目的外,您都不希望使用此功能.如果要以后再访问它们(在执行操作时),请在创建线程时跟踪它们.
or give them priorities ?
正如文档所说:
currently, there are no priorities, no thread groups, and threads cannot be destroyed, stopped, suspended, resumed, or interrupted.
如果您需要这样做,则必须走出线程的范畴,例如通过ctypes,win32api等使用本机API.