Ich habe viele verschiedene skripts. Alls kommunizieren untereinander mit TCP sockets.
Bis jetzt habe ich die skripts unter Linux mit einem shell aufgerufen, was wiefolgt ausgesehen hat.
Code: Alles auswählen
$GFP_BASE_DIR/source.py \
--VCAT_host $VCAT_SOURCE_HOST_LOCAL \
--VCAT_port $DATA_FROM_GFP_PORT_LOCAL \
--infile $VCAT_SOURCE_FILE \
--basedir $GFP_BASE_DIR &
childPids=( "${childPids[@]}" $! )
$GFP_BASE_DIR/source.py \
--VCAT_host $VCAT_SOURCE_HOST_REMOTE \
--VCAT_port $DATA_FROM_GFP_PORT_REMOTE \
--infile $VCAT_SOURCE_FILE \
--basedir $GFP_BASE_DIR &
childPids=( "${childPids[@]}" $! )
Dieser code führt 2 mal das source.py aus beide laufen parallel und sind unter Linux ein eigener Process.
Dadurch das es jetzt auch unter windows laufen soll ohne irgendwelche installation(ausser python), wollte ich das shell skript duch eine sozusagen Toplevel pythonskript ersetzten.
Dafür habe ich in jedem skript die methode run erstellt wo ich unteranderem ein Objekt er klasse erstelle (source.py hat eine run wo die Klasse source instanziert wird). Nun scheint es als ob ich 2 mal das gleiche objekt benutzte.
Wie kann man das lösen. wie gesagt alle skipts sollten parallel laufen.
Hier noch ein posting meines python codes source.py
Code: Alles auswählen
import sys
def run(verbose,
VCAT_host, VCAT_port,
input_filespec, base_directory):
if VCAT_host == -1:
VCAT_host = 'localhost'
if VCAT_port == -1:
VCAT_port = 16000
if base_directory == -1:
base_directory = '.'
if input_filespec == -1:
input_filespec = 'ITUT_G7042_LCAS.pdf'
input_filespec = base_directory + '/' + input_filespec
if verbose:
print "\nGenerating data for a VCAT flow"
print indent, 'VCAT source host is', VCAT_host
print indent, 'VCAT source port is', VCAT_port
print indent, 'Basedir is', base_directory
print indent, 'Input file is', input_filespec
print ''
#-------------------------------------------------------------------------------
# Instanciate an object of GFP data source class
#
if verbose:
verbosity = 1
else:
verbosity = None
source = GFP_source('file data',
VCAT_host,
VCAT_port,
input_filespec,
verbosity)
################################################################################
# Define the GFP data source class
#
# define project libraries
from channel.tx import Tx
from channel.thread import Thread
from channel.common import DataHandler
from channel.common import Error
from channel.api import *
from Common.VCAT_LCAS import *
# define the GFP data source class
class GFP_source(Thread):
def __init__(self,
name,
Tx_host,
Tx_port,
filespec,
verbosity = None):
Thread.__init__(self, name, verbosity)
#---- create the output channel and start connections
self.output = Tx(self,
'out',
data_from_GFP_request_nb,
(Tx_host, Tx_port),
verbosity)
self.start()
#---- run this IP's core function
try:
self.main(filespec)
except Error:
self.msg('Error in "main", time to leave.', -2)
self.kill(True)
#--------------------------------------------------- data generation from file
def generate_data(self):
new_block = self.STREAM.read(GFP_packet_length)
return new_block
#================================================================ data queuing
def main(self, input_filespec):
#----INITIALISATION
#---- open the data file
self.STREAM = open(input_filespec, 'rb')
#---- START WORKING
#---- prepare packets to be requested by the sink
output_buffers = []
for index in range(self.output.size):
new_block = self.generate_data()
self.msg('Preparing to send ' + repr(new_block))
dh = DataHandler(new_block)
output_buffers.append(dh)
Send(self.output, dh, data_from_GFP_message_length)
output_buffers_pointer = 0
#---- main loop: prepare a new packet as one has been sent
while True:
#---- wait for a message to be sent
Wait(self.output)
#---- prepare a new packet
new_block = self.generate_data()
self.msg('Preparing to send ' + repr(new_block))
#---- queue it on the output channel
dh = output_buffers[output_buffers_pointer]
dh.setData(new_block)
Send(self.output, dh, data_from_GFP_message_length)
#---- increment the buffer pinter modulo the buffer length
output_buffers_pointer = (output_buffers_pointer + 1) % self.output.size
Danke
tschinz