2017-03-24 109 views
0

是否可以通过变量变量设置循环?我正在使用线程,并且变量可以在两行之间经常更改。变量变化的实时检测

我正在寻找这样的事情:

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的可能吗?

编辑:更多我正在寻找的东西,以便循环重新启动,如果some_list更改。

+0

有人会来的,并提出一个队列,我要崩溃,因为我打我的头撞墙试图让与等待值进度条同时返回一个值线程要退回TT – Charlie

+1

队列如何? – tdelaney

+1

你试过了一个队列吗? – Eric

回答

2

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

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

UPDATE

队列可以为你工作。修改的东西需要发布到队列中,所以它不是自动的。如果内存被队列耗尽,后台线程也会落后并处理旧的东西,或者最终导致崩溃。

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() 
+0

那么,我需要的是它有实时更新,所以如果变量改变,那么它会重新启动循环。我将编辑我的帖子。 –

+0

如果列表正在写入而您复制它,它不会抛出? – Eric

+0

@Eric - 在复制期间python不会释放GIL,所以它的线程安全。如果我正在做一些循环附加操作,情况会有所不同。 – tdelaney