Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表和线程安全_Python_Multithreading - Fatal编程技术网

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本身是线程安全的,因此如果异常为空,您可以捕获它,但请参见。最好使用队列。很难说什么方法是安全的。