我有一個腳本,它應該生成一個隨機數,它代表25到28°C之間的傳感器溫度,並執行一個POST請求,其中包含一些xml身體。該代碼的結構是這樣的:隨機數的產生和使用random.seed()
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()
,相同的模擬溫度始終返回並公佈。
我目前的理解是,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()
有沒有人知道它爲什麼會在第一種情況下返回相同的數字?
EDIT1:嘗試了@dursk的建議,但它仍然不起作用。我做了以下修改:
create_DATA_contentInstance_xml_body = '''<obj>
<str name="appId" val="''' + new_senzor_name + '''"/>
<str name="category" val="temperature "/>
<int name="data" val="{}"/>
<int name="unit" val="celsius"/>
</obj>
'''
而且
create_DATA_contentInstance = urllib2.Request(url=create_DATA_contentInstance_url ,
data=create_DATA_contentInstance_xml_body.format(randomTemperature()),
headers={'Authorization': 'Basic YWRtaW46YWRtaW4='})
但是,如果在每個生成的溫度值之間存在1到5秒的延遲,它在同一秒內是如何調用的? – TheAptKid
如果它在同一秒內被調用過,它仍然會產生一個隨機數,因爲'random.seed()'使用'os.urandom'作爲它的熵源。 – ppperry