【发布时间】:2016-12-28 17:33:03
【问题描述】:
我有一个缓存处理函数,它处理线程放置在队列中的函数。
当控制台空闲时调用缓存处理程序。我需要能够知道某个函数是否正在由缓存处理程序处理,或者它是否在缓存处理程序循环之外执行。
类似这样的一些逻辑:
如果引用函数堆栈中的缓存处理程序,则返回True:
这是缓存处理程序代码:
# Processing all console items in queue.
def process_console_queue():
log = StandardLogger(logger_name='console_queue_handler')
if not CONSOLE_CH.CONSOLE_QUEUE:
return
set_console_lock()
CONSOLE_CH.PROCESSING_CONSOLE_QUEUE.acquire()
print('\nOutputs held during your last input operation: ')
while CONSOLE_CH.CONSOLE_QUEUE:
q = CONSOLE_CH.CONSOLE_QUEUE[0]
remove_from_console_queue()
q[0](*q[1], **q[2])
CONSOLE_CH.PROCESSING_CONSOLE_QUEUE.release()
release_console_lock()
return
如果该代码调用一个函数,该函数调用一个函数,该函数又调用一个函数....(该链中的任何位置都由 process_console_queue 调用)在被调用函数内返回 True。
这是怎么做到的?
【问题讨论】:
-
与其搞乱堆栈,为什么不给函数另一个参数来表示它是否被缓存处理程序调用?
-
这意味着用另一个 arg 重构项目中的每个函数。整个项目中使用了 2 个函数,如果它们在堆栈中的任何位置被缓存处理程序调用,它们需要对输入进行稍微不同的处理。如果我可以对此进行测试,那么 1-2 行代码就可以解决问题,而无需完全重构。
标签: python multithreading python-3.x