在回答之前,请理解我不希望你为我做这项工作。我更愿意回答一个措辞性的答案,为什么我的(可能是理论上的)问题存在,并且解释了修复它的过程。当有人为我做这项工作时,我觉得更难学好。提前谢谢。
我有这个功能:它完全像它正在做的那样。它使用的是包含facebook ID的页面中的html,并在找到后返回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 - 请注意,它是一个WIP,作为学习线程的练习......
答案 0 :(得分:7)
一个更简单的问题形式:如果我从多线程环境中调用此函数,我是否会遇到问题,
是的,我可以告诉它是线程安全的
还是我需要把它移到自己的班级?
线程安全与类无关:它与共享状态有关。如果线程共享状态,则必须设置以线程安全的方式访问/改变此状态,即使用锁。
答案 1 :(得分:0)
您的函数中使用的内置函数len()
,str()
可以在其他线程中进行猴子修补。
答案 2 :(得分:0)
这并不容易,因为每个get*()
函数都可以使用缓存。
因此,每次通话都可能导致数据变化。 - >问题