Content van Python doorsturen

Gestart doorAarclay15 reacties456 weergaven

16 berichten · pagina 1 van 2

Aarclay

Lid · Topicstarter

Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Zijn er mensen hier die bekend zijn met Python?

Hopelijk is dit geen complex verhaal wat ik jullie ga vertellen, maar het is een redelijk simpele vraag voor een doorgewinterde Pythoner. yummie
Ik heb dus een mooi Python-script wat via ZeroMQ een datastroom binnenhaalt (treinposities), en dat werkt perfect, en ik krijg om de tien seconden een mooie XML-feed binnen.

#!/usr/bin/env python2
from gzip import GzipFile
from cStringIO import StringIO
from subprocess import call
import zmq

context = zmq.Context()

subscriber = context.socket(zmq.XSUB)
subscriber.connect("tcp://pubsub.*******.nl:7664")
subscriber.send(chr(0x01) + "/RIG/NStreinpositiesInterface5") # 0x01 = subscribe, 0x00 = unsubscribe


x=0

while True:

        multipart = subscriber.recv_multipart()
        address = multipart[0]
        contents = .join(multipart[1:])
        contents = GzipFile(,r,0,StringIO(contents)).read()
        filename="tmp/treinpos.txt"
        file = open(filename,"w")
        file.write(contents)
        file.close()

subscriber.close()
context.term()


Nu wordt er dus constant contents dus gebruikt om dit naar een bestand te schrijven, voor nu. Hoe kan ik dit in het geheugen opslaan, zodat ik dit met een de PyBottle-plugin kan outputten?

En klopt het dat dit uiteraard minder belastend is voor de server?

Hopelijk zijn er hier mensen die Python-kennis hebben, en snappen wat ik bedoel.
0
Berichten
5.274
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien

Eindhoven, Nederland

Op welke manier wil je deze dan uitlezen? Is het niet handiger om, als er iets binnen komt, een request op jou PHP applicatie aan te roepen? (althans, daar ga ik vanuit) en niet andersom?
0
Aarclay

Lid · Topicstarter

Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Welke PHP-applicatie? De XML wordt uiteindelijk wel door PHP uitgelezen, maar dat is een bijzaak.
Het punt is dat ik eerst gewoon de XML wil outputten.
(Dit draait op een andere server)

Het gaat er om dat ik dus content heb, waar met een interval van elke tien seconden een nieuwe XML in staat. Deze wil ik dus outputten naar PyBottle ofzo. Kan ik dit niet steeds naar het geheugen schrijven, i.p.v. constant naar een tekstbestand schrijven?
0
Aarclay

Lid · Topicstarter

Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Iemand een idee?
0
Aarclay

Lid · Topicstarter

Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Niemand? Of zal ik maar op StackOverflow een poging wagen?
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Ik denk dat je op een site waar wat meer python programmeurs zitten meer reacties krijgt ja wink
0
Berichten
8.602
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Kun je niet vanuit het script hierboven het gewoon printen en dan met een ander programma opvangen? Is vanuit Linux mogelijk iig.
0
Aarclay

Lid · Topicstarter

Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Je bedoelt dat ik de variabele gebruik in PyBottle bijvoorbeeld?

# dit bovenaan
from bottle import route, run, template

@route(/vt/)
def index(name):
    return template(content)

run(host=localhost, port=8080)


En dat dus op de plek van die while?
Maar dan maakt hij steeds nieuw een instance aan van de PyBottle?

Of bedoel je dat ik dit buiten de while moet zetten?
0
Aarclay

Lid · Topicstarter

Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Iemand? smileIk kan het wel proberen, maar ik heb geen zin om op een semi-productie server een load te veroorzaken doordat het niet klopt.
0
Berichten
8.602
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik weet niet of je het met Linux piping kunt doen.. En hoeveel load dat veroorzaakt.
0
Aarclay

Lid · Topicstarter

Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Ik weet wel wat dat is, maar hoe zie je het in dit script dan?
Waarheen moet ik de output pipen?
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Misschien is memcached iets?
0
Berichten
5.274
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien

Eindhoven, Nederland

Wat houd je trouwens tegen om dit in PHP te maken? Ik zie dat het om ZeroMQ gaat en PHP heeft ook een mooie 0MQ libary, als ik even in de documentatie lees. En volgensmij ken je PHP beter dan Python smile.

Daarnaast ging ik er in mijn eerste reactie vanuit dat het de bedoeling was dat je uiteindelijk de URL zelf zou aanroepen vanuit een PHP applicatie. Hierdoor dacht ik dat je het beter andersom kan doen:
``Python (als er nieuwe data is) => HTTP => PHP``
Ipv wat je nu wilt:
`PHP (als hij data wilt) => HTTP => Python.`
0
Aarclay

Lid · Topicstarter

Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Die discussie wordt ik eigenlijk een beetje zat yummieHet moet gewoon in Python kunnen, en verder wil ik toch wel wat meer dan enkel PHP kunnen, omdat Python ook erg krachtig is. (Krachtiger dan PHP zelfs volgens mij)

Verder heb ik ook geen zin om PHP op mijn tweede server te installeren wink. (extra onnodige resources)

Dus laten we het nu op Python richten, i.p.v. een andere programmeertaal. smile
Ik zal eens kijken of memcached iets kan doen.
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Ipv memcached zou in redis gaan gebruiken. Die ondersteunt wat leukere technieken en is ook up to date smile.
Of dit minder belastend is zou ik niet durven zeggen zonder te testen.
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren