多个python线程同时向同一列表中的不同记录写入数据-可以吗?

多个python线程同时向同一列表中的不同记录写入数据-可以吗?,python,multithreading,locking,Python,Multithreading,Locking,我试图修复一个多线程写入内存列表的错误。现在我有一个线程锁,偶尔会遇到与线程中所做工作相关的问题 我希望简单地对列表进行散列,每个线程一个列表,然后移除线程锁。似乎每个线程都可以写入自己的记录,而不必担心其他线程,但可能它们都使用相同的拥有哈希本身就是一个问题 有人知道这是否有效吗?如果不是,我可以为每个线程动态地向包中添加一个列表吗?这本质上是一样的吗 我远非线程专家,因此欢迎任何建议 谢谢 import threading def job(root_folder,my_list):

我试图修复一个多线程写入内存列表的错误。现在我有一个线程锁,偶尔会遇到与线程中所做工作相关的问题

我希望简单地对列表进行散列,每个线程一个列表,然后移除线程锁。似乎每个线程都可以写入自己的记录,而不必担心其他线程,但可能它们都使用相同的拥有哈希本身就是一个问题

有人知道这是否有效吗?如果不是,我可以为每个线程动态地向包中添加一个列表吗?这本质上是一样的吗

我远非线程专家,因此欢迎任何建议

谢谢

import threading

def job(root_folder,my_list):
    for current,files,dirs in os.walk(root):
        my_list.extend(files)
        time.sleep(1)

my_lists = [[],[],[]]
my_folders = ["C:\\Windows","C:\\Users","C:\\Temp"]
my_threads = []
for folder,a_list in zip(my_folders,my_lists):
    my_threads.append(threading.Thread(target=job,args=(folder,a_list)
for thread in my_threads:
   thread.start()
for thread in my_threads:
   thread.join()

my_full_list = my_lists[0] + my_lists[1] + my_lists[2]
这样,每个线程只修改自己的列表,并在最后合并所有单独的列表

另外,正如所指出的,这会带来零性能增益(实际上可能比不线程化要慢…)您可以使用多处理来获得性能增益…

不要使用列表。使用队列(python2)或队列(python3)。 有3种队列:先进先出、后进先出和优先级。最后一个用于有序数据

您可以将数据放在一侧(带线程):

然后到达另一边(可能是数据库的循环):


几乎可以肯定不是。。。。根据标题说明,在Python中,多线程对I/O性能很有用,但对CPU没有帮助。您好,谢谢您的回答。在我看来,我的_列表对于线程来说是本地的,这将使它们分开。很酷。如果您有时间,是否可以编辑一条注释,其中包含有关定期从主线程访问每个线程的本地my_列表的任何注意事项。换句话说,我的线程将运行很长一段时间来收集我想要复制的数据。我是否只是在同样包含job()的类中放置了一个线程锁?
q.put(data)
while not q.empty:
    print q.get()