Python函数线程安全么?(特别是这个?)
在回答之前,请理解我并不想让你为我完成工作。我更希望能得到一个文字解释,告诉我为什么我这个(可能是理论上的)问题存在,以及解决它的过程。我发现当有人直接为我做工作时,我更难以正确学习。提前谢谢你。
我有一个函数:它的功能就是看起来那样。它使用一个页面上的 HTML,里面包含一个 Facebook ID,并在找到后返回这个 ID。
def getID(data): #Find an ID from HTML input.
data = str(data)
appstring = 'http://apps.facebook.com/castle_age/keep.php?user=' #We're gonna find this in the html.
appstr_start_pos = data.find(appstring) #Tell us where we found it oh mighty one!
if appstr_start_pos != -1: #If we find it.
begin_ID_pos = appstr_start_pos + len(appstring)
end_ID_pos = data.find('"', begin_ID_pos) #Find the end quote, that'll be the end of our ID string.
our_ID = data[begin_ID_pos:end_ID_pos]
return our_ID
现在我还没有把它放到我的某个使用了 thread.Threading 方法的类里,但我还是在定期调用它。现在我的代码只运行一个线程,可能我需要从另一个线程类中调用这个函数;这样做可以吗?如果不行,我该如何在不同的线程类之间使用这个函数?
更简单地说:如果我在一个多线程环境中调用这个函数,会有问题吗?还是说我需要把它放到自己的类里?有没有办法让这个函数在两个不同的线程对象之间可用(如果可以,最简单的方法是什么)?
这是完整的代码: http://pastebin.com/txH8PvL3 -- 请记住,这只是一个正在进行中的项目,目的是为了学习线程...
3 个回答
0
这件事并不简单,因为每个 get*()
函数可能会使用缓存。这样每次调用都可能导致数据发生变化。——这就是问题所在。
0
内置函数 len()
和 str()
,在你的函数中使用时,可以在其他线程里被修改。
8
问题更简单地说就是:如果我在多线程环境中调用这个函数,会不会出问题?
从我所了解的情况来看,这个函数是线程安全的。
或者我需要把它放到自己的类里吗?
线程安全和类没有关系,主要是看共享的状态。如果多个线程共享同一个状态,就需要采取措施,确保在访问或修改这个状态时是安全的,也就是说要使用锁。