我正在尝试在 python 中构建一个依赖多个线程的程序,并在线程之间共享数据。我试图避免使用 global 关键字执行此操作,但到目前为止还没有到达任何地方。
作为一个简单的例子(下面的代码),我的 main() 函数产生了一个线程 thread1,它应该能够访问变量 count,在这种情况下只是为了打印它。同时,main() 对这个变量进行了迭代,thread1 应该可以看到计数的变化。这里有一些自包含的代码:
import threading
import time
class myThread (threading.Thread):
def __init__(self, threadID):
self.threadID = threadID
threading.Thread.__init__(self)
def run(self):
global count
for i in range(10):
print "count is now: ", count, " for thread ", self.threadID, "\n"
time.sleep(5)
def main():
global count
count = 0
# spawn one or more threads
thread1 = myThread(1)
thread1.start()
for i in range(20):
time.sleep(2)
count = count + 1
# wait for thread1 to finish
thread1.join()
main()
在阅读 python 中的线程时,除了使用 global. 然而,当阅读 global 时,大多数人说你应该很少使用它,有充分的理由,有些人甚至认为它应该从 python 中完全删除。所以我想知道是否真的有另一种方法可以让thread1“被动地”检测到main()有迭代计数,并访问那个新值?例如,我对 python 和指针了解不多(它们甚至存在于 python 中吗?),但无论如何我都会假设这正是 global 实现的。
理想情况下,每当迭代 count 时,我都可以从 main() 调用 thread1 方法来设置新的 self.count,但是由于 thread1 有一个阻塞的 run() 方法,如果没有另一个方法,我无法看到如何做到这一点thread1里面的独立线程,看起来太复杂了。