So wirklich der wirkliche Code kann das auch nicht sein, denn das fällt ziemlich am Anfang wegen `port` mit einem `NameError` auf die Nase.
Weitere Anmerkungen: `new_point` wird nirgends verwendet. `fake_point` sollte eher `fake_points` heissen.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst, und nur aufgerufen werden sollte wenn das Modul als Programm ausgeführt wird, aber nicht wenn man es importiert.
Variablen und Code auf Modulebene ist ja schon nicht gut, aber dann auch noch Funktionsdefinitionen mitten rein zu schreiben wird ganz schnell *sehr* unübersichtlich. Und damit fehleranfällig
Kryptische Abkürzungen wie `rndnr` sollte man nicht verwenden. Namen sollten dem Leser vermitteln was die Werte dahinter bedeuten, und keine Fragezeichen beim Lesen hinterlassen.
Die Funktion bekommt ein Argument das überhaupt nicht verwendet wird.
Um die Punkte zu erzeugen bietet sich eine „list comprehension“ an. Dann ist die Funktion ein Einzeiler.
Wenn man das Problem mit der `time_precision` gelöst hat, gibt es dort beim zweiten Aufruf Argumente die es bei der Methode gar nicht gibt: `numeric_precision`, `field_columns`, und `tag_columns`. Wo hast Du die her?
Bis auf `protocol` übergibst Du bei allen anderen (gültigen) Schlüsselwort-Argumenten den Defaultwert. Die kann man also auch alle weglassen.
Ungetestet:
Code: Alles auswählen
import random
from influxdb import InfluxDBClient
BATCH_SIZE = 1000
def generate_random_points():
return [random.randint(1, 1000) for _ in range(BATCH_SIZE)]
def main():
test_client = InfluxDBClient.from_dsn(
'influxdb://user:pw@host:port/database'
)
print('Opened database successfully')
fake_points = generate_random_points()
test_client.write_points(fake_points)
test_client.write_points(fake_points, protocol=u'line')
if __name__ == '__main__':
main()