我打算检查很多项目,看看是否有任何项目可以满足某些条件。一个一个地遍历它们非常慢。
我想使用多个线程,每个线程检查一个较小的项目列表。一旦一个线程发现条件满足,它应该告诉所有其他线程搜索完成。
我在 Python 中遇到多线程问题。我的简化代码如下所示:
def func_with_multithread():
flag = True
# a inner thread class
class WorkerThread(threading.Thread):
# ...some init work...
def run(self):
# ...check the flag...
if flag:
# do something
# can only set flag to False
if condition:
flag = False
# start several thread class
...
当我运行程序时,它说
UnboundLocalError: local variable 'flag' referenced before assignment
Python 似乎在提示这个赋值语句:flag = False
如果我使用 global flag 来尝试解决这个问题,它会说:
NameError: global name 'has_litigation' is not defined
但我用它通过多个线程将项目放入字典,这似乎没问题。
在我看来,不存在竞争条件,因为我只想将标志设置为 False 以告诉其他线程该退出了;无需再次将其设置为 True。
有没有办法实现我想要做的事情?
请您参考如下方法:
您遇到了 Python 2.x 的问题之一。它与多线程没有任何关系。 PEP 3104 -- 访问外部作用域中的名称 https://www.python.org/dev/peps/pep-3104/ .
在 Python 3.x 中你可以这样写:
def outer_func():
flag = True
class InnerClass(object):
def run(self):
nonlocal flag
if flag:
print flag
flag = False
但在 2.x 中这是不可能的。
