Python列表和线程安全
我正在使用多个线程来处理一个非常大的列表中的项目,如果它是空的Python列表和线程安全,python,multithreading,Python,Multithreading,我正在使用多个线程来处理一个非常大的列表中的项目,如果它是空的 while item_list: my_item = item_list.pop() 我检查列表中是否有任何项目,如果有,我会弹出一个项目并处理它。这个过程是线程安全的吗 是否有可能当我检查列表中有一个项目,但当我弹出它时,它将消失并引发错误?或任何其他问题?是的,两行之间可能会发生线程切换,当您弹出项目时,列表可能为空。使用线程安全队列。队列来存储您的工作项。当我检查列表中是否有项时,是否有可能在这种情况下,当我弹出“是
while item_list:
my_item = item_list.pop()
我检查列表中是否有任何项目,如果有,我会弹出一个项目并处理它。这个过程是线程安全的吗
是否有可能当我检查列表中有一个项目,但当我弹出它时,它将消失并引发错误?或任何其他问题?是的,两行之间可能会发生线程切换,当您弹出项目时,列表可能为空。使用线程安全队列。队列来存储您的工作项。当我检查列表中是否有项时,是否有可能在这种情况下,当我弹出“是”时。您可以遇到两个线程已经通过while item_列表但尚未执行pop的情况。我很好奇,线程执行的是什么操作?所以我用lock.acquire和lock.release来包围代码。代码也在更新收集到字典中的数据。项目列表中没有重复项,它们用作字典中的键。所以线程可能会同时更新同一个字典,但永远不会同时更新同一个键。这是线程安全的吗?出于好奇:pop本身是线程安全的吗?那么,线程是否可以在不先检查的情况下直接弹出呢?或者在pop的执行过程中会发生线程切换吗?@HeapOverflow是的,pop本身是线程安全的,因此如果异常为空,您可以捕获它,但请参见。最好使用队列。很难说什么方法是安全的。