Victor J Mytre
Victor J Mytre

Reputation: 354

Sending variables from one python thread to another

Lets say I have a function that will run in its own thread since its gettign serial data through a port.

def serialDataIncoming ():
    device = Radar()
    device.connect(port 1, baudrate 256000)
    serialdata = device.startscan
    for count, scan in enumerate(serialdata):
        distance = device.distance
        sector = device.angle

Now I want to run this in its own thread

try: 
   thread.start_new_thread(serialDataIncoming())
except: 
   # error handling here

now , I want to add to the code of serialDataIncoming(), a line where I send the distance and sector to another function to be processed and then send somewhere else, now here is this issue, the data incoming from "device" is continusly being sent, I can experience a delay or even lose some data if I lose some time inside the loop for another loop, so I want to create a new thread and from that thread run a function that will receive data from the first thread and process it and do whatever.

def dataProcessing():
    # random code here where I process the data

However my issue is , how do I send both variables from one thread to the second thread, in my mind within multiple threads the second thread would have to wait until it receives variables and then start working, its going to be send a lot of data at the same time so I might have to introduce a third thread that would hold that data and then send it to the thread that processes.

So the question is basically that, how would I write in python sending 2 variables to another thread, and how would that be written in the function being used on the second thread?

Upvotes: 1

Views: 89

Answers (1)

elldur
elldur

Reputation: 2103

To pass arguments to the thread function you can do:

def thread_fn(a, b, c):
    print(a, b, c)

thread.start_new_thread(thread_fn, ("asdsd", 123, False))

The list of arguments must be a tuple or list. However in Python only one thread is actually running at a time so it may actually be more reliable (and simpler) to work out a way to do this with one thread. From the sounds of it you are polling the data so this is not like file access where the OS will notify the thread when it can wake up again once the file operation has completed (hence you wont get the kind of gains you would from multithreaded file access.)

Upvotes: 1

Related Questions