我有一个脚本,它应该生成一个随机数,表示25到28°C之间的传感器温度,并在正文中执行一个带有一些xml的POST请求。代码的结构如下:
frame
如果我运行webView
,则始终返回并发布相同的模拟温度。</ p>
我目前的理解是def randomTemperature():
random.seed()
return str(random.randint(25,28))
create_DATA_contentInstance_xml_body = '''<obj>
<str name="appId" val="''' + new_senzor_name + '''"/>
<str name="category" val="temperature "/>
<int name="data" val="''' + randomTemperature() + '''"/>
<int name="unit" val="celsius"/>
</obj>'''
create_DATA_contentInstance = urllib2.Request(url=create_DATA_contentInstance_url ,
data=create_DATA_contentInstance_xml_body,
headers={'Authorization': 'Basic abcaW46YabcaW4='})
def createDATAcontentInstance():
urllib2.urlopen(create_DATA_contentInstance)
print "\n=== Created a DATA contentInstance ==="
def createSensorAndDataInstances():
while True:
#generate a random delay
randomDelay = random.randint(1,5)
time.sleep(randomDelay)
createDATAcontentInstance()
createSensorAndDataInstances()
方法使用系统的当前时间作为方法的参数,因此如果我运行以下代码,该方法应该返回一个随机数,这是一个剥离版本我的脚本代码:
createSensorAndDataInstances()
有人知道为什么它会在第一种情况下继续返回相同的数字吗?
EDIT1:尝试了@dursk建议的内容,但仍然无效。我做了以下更改:
random.seed()
和
import random
import time
def randomTemperature():
random.seed()
return str(random.randint(25,28))
def createSensorAndDataInstances():
while True:
#generate a random delay
randomDelay = random.randint(1,5)
time.sleep(randomDelay)
print randomTemperature()
createSensorAndDataInstances()
答案 0 :(得分:0)
首次加载模块时,xml字符串中对randomTemperature()
的调用会先行一次。您需要参数化字符串,并调用该方法,每次都传递一个新值。
create_DATA_contentInstance_xml_body = '''
<obj>
<str name="appId" val="{}"/>
<str name="category" val="temperature "/>
<int name="data" val="{}"/>
<int name="unit" val="celsius"/>
</obj>
'''
def createDATAcontentInstance():
urllib2.urlopen(create_DATA_contentInstance.format(
new_senzor_name,
randomTemperature()
)
print "\n=== Created a DATA contentInstance ==="
答案 1 :(得分:-1)
因为你在同一秒内反复调用random.seed()。 您需要在脚本开头调用它,并且永远不要再执行它。它不应该放在你不止一次调用的函数中。
抱歉,不是真的,请看durks的回答。但是我所说的每个脚本只需调用一次的random.seed()仍然有效。