我很难理解 Python 线程,特别是因为文档在某些时候明确告诉您 RTFS,而不是友好地包含相关信息。我承认我没有资格阅读线程模块。我见过很多非常简单的例子,但它们都使用全局变量,这很令人反感,让我想知道是否有人真的知道何时何地需要使用它们,而不是仅仅为了方便。
特别是,我想知道:
- 在
threading.Thread(target=x)
, 是x
共享的还是私有的?每个线程都有自己的堆栈,还是所有线程同时使用相同的上下文? - 将可变变量传递给线程的首选方法是什么?不可变的显然已经通过了
Thread(args=[],kwargs={})
,这就是所有示例所涵盖的内容。如果它是全球性的,我将不得不捏着鼻子使用它,但似乎必须有更好的方法。我想我可以将所有内容包装在一个类中,然后将实例传入,但最好也指向常规变量。 - 我什么时候需要
threading.local()
?在x
上面? - 正如许多示例所示,我是否必须对 Thread 进行子类化才能更新数据?
我习惯于 Win32 线程和 pthreads,它在文档中明确列出了与线程的不同用途共享和不共享的内容。这些都是相当低级的,如果可能的话,我想避免 _thread 是pythonic。
我不确定它是否相关,但我正在尝试使用 OpenMP 风格的线程来掌握它 - 使用队列和一些线程同时运行 for 循环。使用全局变量和锁很容易,但现在我想确定范围以更好地使用锁。