我在类中定义了一个方法,如下所示:
from Queue import Queue
from threading import Thread, Lock
class Example(object):
def f(self):
things = [] # list of some objects to process
my_set = set()
my_dict = {}
my_list = []
def update(q, t_lock, my_set, my_dict, my_list):
while True:
thing = q.get()
new_set, new_dict, new_list = otherclass.method(thing)
with t_lock:
my_set = set_overlay(my_set, new_set)
my_dict.update(new_dict)
my_list += new_list
q.task_done()
q = Queue()
num_threads = 10
thread_lock = Lock()
for i in range(num_threads):
worker = Thread(target=update, args=(q, thread_lock, my_set, my_dict, my_list))
worker.setDaemon(True)
worker.start()
for t in things:
q.put(t)
q.join()
正如您所看到的那样,我尝试更新变量my_set
,my_dict
和my_list
,其中包含来自内部定义的线索update
方法的一些结果f
方法。我可以将它们全部传递给更新函数,但这仅适用于可变数据类型。
我将此更新为使用threading.Lock()
作为用户maxywb
建议,但我想保留以下相同的问题,以便在包含锁定时回答。
我的问题是:
int
的结果中添加一个otherclass.method(thing)
的{{1}}混合变量,那该怎么办?我该怎么做呢?