如何用Python修改两个函数中的全局变量?

2024-03-29 09:46:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Tornado编写了tow处理程序,HandlerFirst是一个服务器发送的事件处理程序,带有while循环,用于获取全局变量new\u test的值,我想用HandlerSecond更改值。你知道吗

我的代码如下:

new_test = 0

def update_test_flag(new_test):
    print("now_value: ", new_test)
    return new_test + 1

class HandlerFirst(RequestHandler):
    async def get(self):
        while True:
            global new_test
            new_test = update_test_flag(new_test)
            if new_test == 0:
                self.write('data:0\n\n')
                self.flush()
            time.sleep(2)


class HandlerSecond(RequestHandler):
    async def get(self):
        global new_test
        print("test: ", new_test)
        new_test = 0
        print("test changed: ", new_test)
        self.write("ok")

结果是:

now_value:  0
now_value:  1
now_value:  2
now_value:  3
now_value:  4
test:  0
test changed:  0
[2018-04-16 10:52:36,689] (tornado.access):web.py:log_request-(2063)INFO: 304 GET /dashboard/test-sse/ (192.168.0.29) 1.09ms
[2018-04-16 10:52:36,763] (tornado.access):web.py:log_request-(2063)INFO: 200 GET /favicon.ico (192.168.0.29) 3.01ms
now_value:  5
now_value:  6
test:  0
test changed:  0
[2018-04-16 10:52:41,561] (tornado.access):web.py:log_request-(2063)INFO: 304 GET /dashboard/test-sse/ (192.168.0.29) 0.45ms
[2018-04-16 10:52:41,592] (tornado.access):web.py:log_request-(2063)INFO: 200 GET /favicon.ico (192.168.0.29) 0.45ms
now_value:  7
now_value:  8

似乎while循环中的更改没有保存,我使用全局变量有什么问题吗?谢谢你的帮助和提示。你知道吗

附言:我也发现了一个类似的问题,没有解决办法。Change global variable in Python in another thread


Tags: pytestselfinfologwebnewget