访问不同模块中的线程本地对象 - Python

时间:2017-08-10 05:36:46

标签: python multithreading

我是Python的新手,所以请忍受我的问题。

假设我的应用程序有一个名为message_printer的模块,它只定义了一个print_message函数来打印消息。现在在我的主文件中,我创建了两个在message_printer中调用print函数的线程。

我的问题是:如何为每个线程设置不同的消息并在message_printer中访问它?

message_printer:

import threading

threadLocal = threading.local()

def print_message():
   name = getattr(threadLocal, 'name', None);
   print name
   return

主:

import threading
import message_printer

threadLocal = threading.local()

class Executor (threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self)
        threadLocal.name = name

    def run(self):
        message_printer.print_message();

A = Executor("A");
A.start();
B = Executor("B");
B.start();

这只会输出NoneNone,而我期待AB。我也尝试直接访问print_message函数中的threadLocal对象,但不起作用。

请注意,这只是一个例子。在我的应用程序中,确切的用例是用于日志记录。 Main启动了一堆调用其他模块的线程。我希望每个线程有一个不同的记录器(每个线程应该记录到它自己的文件),并且需要在Main中配置每个记录器。所以我试图为每个线程实例化记录器并设置在线程本地存储中,然后可以在其他模块中访问它。

我做错了什么?我是以Thread local storage in Python

为例说明这个问题的

1 个答案:

答案 0 :(得分:0)

我认为this对您的用例可能会有所帮助。关于如何跨文件/模块完成线程存储的另一种方法。