Python 变量变化的实时检测

Python 变量变化的实时检测,python,Python,是否可以设置带有活动变量更改的循环?我使用的是线程,变量在行间经常会发生变化 我在找这样的东西: length = len(some_list) while length == len(some_list): if check_something(some_list): # The variable could change right here for # example, and the next line would still be called

是否可以设置带有活动变量更改的循环?我使用的是线程,变量在行间经常会发生变化

我在找这样的东西:

length = len(some_list)
while length == len(some_list):
    if check_something(some_list):
        # The variable could change right here for 
        # example, and the next line would still be called.
        do_something(some_list)
到目前为止我还没有运气,这在python中是可能的吗


编辑:我要寻找的更多信息是,如果
某些列表发生更改,循环将重新启动。

如果只是一个更改列表,您可以制作本地副本

def my_worker():
    my_list = some_list[:]
    if check_something(my_list):
        do_something(my_list)
更新

队列可能适合您。修改的东西需要发布到队列中,因此它不是自动的东西。还有一种风险,就是后台线程落后,处理旧的内容,或者如果队列耗尽内存,最终导致所有内容崩溃

import threading
import queue
import time

def worker(work_q):
    while True:
        some_list = work_q.get()
        if some_list is None:
            print('exiting')
            return
        print(some_list)

work_q = queue.Queue()
work_thread = threading.Thread(target=worker, args=(work_q,))
work_thread.start()

for i in range(10):
    some_list.append(i)
    work_q.put(some_list[:])
    time.sleep(.2)
work_q.put(None)

work_thread.join()

如果只是一个更改列表,您可以制作本地副本

def my_worker():
    my_list = some_list[:]
    if check_something(my_list):
        do_something(my_list)
更新

队列可能适合您。修改的东西需要发布到队列中,因此它不是自动的东西。还有一种风险,就是后台线程落后,处理旧的内容,或者如果队列耗尽内存,最终导致所有内容崩溃

import threading
import queue
import time

def worker(work_q):
    while True:
        some_list = work_q.get()
        if some_list is None:
            print('exiting')
            return
        print(some_list)

work_q = queue.Queue()
work_thread = threading.Thread(target=worker, args=(work_q,))
work_thread.start()

for i in range(10):
    some_list.append(i)
    work_q.put(some_list[:])
    time.sleep(.2)
work_q.put(None)

work_thread.join()


排队怎么样?你试过排队吗?@Eric-太晚了!我是这堆狗屎中的第一个。我在发布前也看到了你的评论=)我想我们都是因为Charlie G的评论而挖苦的。排队怎么样?你试过排队吗?@Eric-太晚了!我是这堆狗屎中的第一个。我在发布之前看到了你的评论(太=)我想我们都是因为Charlie G Comments而挖苦的好吧,我需要的是它有实时更新,所以如果变量发生变化,那么它将重新启动循环。我将编辑我的帖子。如果列表是在你复制时编写的,它不会抛出吗?@Eric-python不会在复制过程中释放GIL,以确保线程安全。如果我在做一些类似于在循环中追加的事情,情况会有所不同。@KepoorHampond-那么也许您确实需要排队。名单大吗?您想对列表进行任何更改吗?这仅仅是基于它的大小变化还是基于它的值变化?我相信你,这里是+10,我需要的是它有实时更新,所以如果变量变化,那么它将重新启动循环。我将编辑我的帖子。如果列表是在你复制时编写的,它不会抛出吗?@Eric-python不会在复制过程中释放GIL,以确保线程安全。如果我在做一些类似于在循环中追加的事情,情况会有所不同。@KepoorHampond-那么也许您确实需要排队。名单大吗?您想对列表进行任何更改吗?这仅仅是基于它的大小变化还是它的值?我相信你,这里是+10