如何与线程共享全局变量?
我的Python代码示例是:
from threading import Thread
import time
a = 0 #global variable
def thread1(threadname):
#read variable "a" modify by thread 2
def thread2(threadname):
while 1:
a += 1
time.sleep(1)
thread1 = Thread( target=thread1, args=("Thread-1", ) )
thread2 = Thread( target=thread2, args=("Thread-2", ) )
thread1.join()
thread2.join()
我不知道如何让两个线程共享一个变量。
您只需要在中声明a
为global thread2
,这样就无需修改a
该函数本地的。
def thread2(threadname):
global a
while True:
a += 1
time.sleep(1)
在中thread1
,您不需要执行任何特殊操作,只要您不尝试修改的值a
(这将创建一个局部变量以遮盖全局变量;global a
请在需要时使用)>
def thread1(threadname):
#global a # Optional if you treat a as read-only
while a < 10:
print a
问题内容: 我正在尝试创建一个分页类,并使用该类外部的变量。 但这给了我致命错误“在非对象上调用成员函数query()”。 这是索引文件: 这是pagi.php文件: 是否可以在类内部使用该变量,而无需在类内部创建新变量? 问题答案: 解决此问题的正确方法是将数据库对象注入另一个类(依赖项注入): 解决该问题的另一种方法是将数据库类的实例注入使用它的方法中: 您选择哪种方法取决于情况。如果只有一个
问题内容: 访问/更改字典值是否是线程安全的? 我有一个全球性的词典和多线程与IDS ,,… 。如果已知每个线程只能使用其与ID相关的值,比如说with with只能使用它,则可以在不为其分配锁的情况下访问和更改其值,可以吗? 问题答案: 假设CPython:是和否。从多个并发读/写请求不会破坏字典的意义上来说,从共享字典中获取/存储值实际上是安全的。这是由于实现保留了全局解释器锁(“ GIL”)
问题内容: 例如,我想使用自定义记录器: 如何在其他模块而不是console.log中使用此记录器? 问题答案: 大多数人建议不要使用全局变量。如果要在不同模块中使用相同的记录器类,则可以执行此操作 logger.js foobar.js 如果确实需要全局变量,则可以执行以下操作:
问题内容: 如何在函数中创建或使用全局变量? 如果在一个函数中创建全局变量,如何在另一个函数中使用该全局变量?我是否需要将全局变量存储在需要对其进行访问的函数的局部变量中? 问题答案: 你可以在其他函数中使用全局变量,方法是像在分配给它的每个函数中一样声明它: 我想这是因为全局变量是如此危险,因此Python希望通过显式要求使用关键字来确保您真正知道这就是要使用的内容。
我知道有一些关于这个问题的问题和帖子/文章,但从我的新手角度来看,不完全是这样。问题是,我有一个主程序监听一个端口,并将调用重定向到一个特定的处理程序。典型结构: 处理程序类似于: 然后,包含函数foo的一些全局变量,基本上是因为函数共享需要它们(例如,当使用容器/堆实现的优先级队列时,它将从全局距离矩阵中获得Swap函数中的优先级当然是可变的)。以及许多其他例子。总之,全局变量... 问题是,正