Home > Software engineering >  How to make an application from two python programs?
How to make an application from two python programs?

Time:11-28

I have two python programs which one of them connects to a bluetooth device(socket package), it receives and saves data from device, and another one read the stored data and draw a real time plot. I should make one application from these two programs.

I tried to mix these two python programs, but since bluetooth should wait to receive data (through a while loop), the other parts of program does not work. I tried to solve this problem using Clock.schedule_interval, but the program will hang after a period of time. So I decided to run these two programs simultaneously. I read, we can run some python programs at a same time using a python script. Is there any trick to join these two programs and build one application? Any help would be greatly appreciated.

CodePudding user response:

Try opening two cmds to run the python files with:

py filename.py

or

On windows you can use batch script. (On Linux you can use bash script.)

Create a file with the .bat extension:

example.bat

Right click -> edit.

example.bat:

py file1.py & py file2.py
Pause

You can remove "Pause". It makes it so you have to press enter to exit when finished.

Double click example.bat

CodePudding user response:

It can be done with threading. To do communication between the threaded function and your main function, use objects such as queue.Queue and threading.Event.

the bluetooth functions can be placed into a function that is the target of the thread

import time
from threading import Thread
from queue import Queue


class BlueToothFunctions(Thread):
    def __init__(self, my_queue):
        super().__init__()
        self.my_queue = my_queue
        # optional: causes this thread to end immediately if the main program is terminated
        self.daemon = True

    def run(self) -> None:
        while True:
            # do all the bluetooth stuff foreverer
            g = self.my_queue.get()
            if g == (None, None):
                break
            print(g)
            time.sleep(1.0)
        print("bluetooth closed")


if __name__ == '__main__':
    _queue = Queue()  # just one way to communicate to a thread
    # pass an object reference so both main and thread have a way to communicate on this common queue
    my_bluetooth = BlueToothFunctions(_queue)
    my_bluetooth.start()  # creates the thread and executes run() method

    for i in range(5):
        # communicate to the threaded functions
        _queue.put(i)
    _queue.put((None, None))  # optional, a way to cause the thread to end
    my_bluetooth.join(timeout=5.0)  # optional, pause here until thread ends
    print('program complete')
  • Related