我打算检查很多项目,以确定它们中是否有任何条件可以满足某些条件。逐个迭代它们非常慢。
我想使用多个线程,每个线程检查一个较小的项列表。一旦线程发现满足条件,它应该告诉所有其他线程搜索完成。
我在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:之前引用的局部变量'flag' 分配
似乎Python抱怨这个赋值语句:flag = False
如果我使用global flag
尝试解决此问题,请说:
NameError:未定义全局名称'has_litigation'
但是我使用它来使用多个线程将项目放入dict,这似乎没问题。
在我看来,没有竞争条件,因为我只想将标志设置为False以告诉其他线程它是时候退出了;没有必要再次将其设置为True。
无论如何要实现我想要做的事情吗?
答案 0 :(得分:1)
你偶然发现了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中它是不可能的。