0

My script is running in python docker container. I'm trying to fetch from sola[r] local API with this loop script (code is working, but only few hours):

   while True:
        startTime = time.time()
        try:
            data = get_solar_data()
        except requests.exceptions.ConnectionError as e:
            print("ERROR!!!", datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
            print(f"ERRor' {e} 'was discovered. Retrying connection in 5 seconds")
            time.sellp(5)
            continue
        data = data["Data"]
        def create_variable(name, value):
            globals()[name] = value
        for index, data in enumerate(data):
            create_variable(f"index{index}", data)

        insert_data_to_database(index0, index1, index2, index3, index4, index5, index6, index7, index8, index9, index10, index11, index12, index13, index14, index15, index16, index17, index18, index19, index20, index21, index22, index23, index24, index25, index26, index27, index28, index29, index30, index31, index32, index33, index34, index35, index36, index37, index38, index39, index40, index41, index42, index43, index44, index45, index46, index47, index48, index49, index50, index51, index52, index53, index54, index55, index56, index57, index58, index59, index60, index61, index62, index63, index64, index65, index66, index67, index68, index69, index70, index71, index72, index73, index74, index75, index76, index77, index78, index79, index80, index81, index82, index83, index84, index85, index86, index87, index88, index89, index90, index91, index92, index93, index94, index95, index96, index97, index98, index99, index100, index101, index102, index103, index104, index105, index106, index107, index108, index109, index110, index111, index112, index113, index114, index115, index116, index117, index118, index119, index120, index121, index122, index123, index124, index125, index126, index127, index128, index129, index130, index131, index132, index133, index134, index135, index136, index137, index138, index139, index140, index141, index142, index143, index144, index145, index146, index147, index148, index149, index150, index151, index152, index153, index154, index155, index156, index157, index158, index159, index160, index161, index162, index163, index164, index165, index166, index167, index168, index169, index170, index171, index172, index173, index174, index175, index176, index177, index178, index179, index180, index181, index182, index183, index184, index185, index186, index187, index188, index189, index190, index191, index192, index193, index194, index195, index196, index197, index198, index199, index200, index201, index202, index203, index204, index205, index206, index207, index208, index209, index210, index211, index212, index213, index214, index215, index216, index217, index218, index219, index220, index221, index222, index223, index224, index225, index226, index227, index228, index229, index230, index231, index232, index233, index234, index235, index236, index237, index238, index239, index240, index241, index242, index243, index244, index245, index246, index247, index248, index249, index250, index251, index252, index253, index254, index255, index256, index257, index258, index259, index260, index261, index262, index263, index264, index265, index266, index267, index268, index269, index270, index271, index272, index273, index274, index275, index276, index277, index278, index279, index280, index281, index282, index283, index284, index285, index286, index287, index288, index289, index290, index291, index292, index293, index294, index295, index296, index297, index298, index299)
        endTime = time.time()
        resultTime = round((endTime - startTime) * 1000) / 1000
        relax = 15 - resultTime
        if relax > 0:
            time.sleep(relax)
        else:
            print("WARNING!!!", datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
            print("Negative sleep time",  round(relax, 2))
            print("Skiping sleep function")

And here is the main.py:

import signal
import time
from threading import Thread
import datetime
from config import API_IP, REGISTRATION_NUMBER, DB_USER, DB_PASSWORD
import dataMiner
# Created by Jakubsulla 2023
def shutdown(signum, frame):
    print(datetime.datetime.now().strftime('%d/%m/%y %H:%M:%S'), "- Stoping docker container")
def web_app():
    with open("web-app.py", "r") as file:
        code = file.read()
    exec(code)
if __name__ == '__main__':
    print(datetime.datetime.now().strftime('%d/%m/%y %H:%M:%S'), "- Starting docker container")
    signal.signal(signal.SIGTERM, shutdown)
    signal.signal(signal.SIGINT, shutdown)
    print("initializing core.")
    time.sleep(0.75)
    print("initializing core..")
    time.sleep(0.75)
    print("initializing core...")
    time.sleep(0.75)
    print("initializing core....")
    time.sleep(0.75)
    print("initializing core DONE")
    dm = Thread(target=dataMiner.data_miner, args=[API_IP, REGISTRATION_NUMBER, DB_USER, DB_PASSWORD])
    dm.start()
    print(datetime.datetime.now().strftime('%d/%m/%y %H:%M:%S'), "- Started data-miner in background")

Don't worry about the web_app function, it's just a preparation for the implementation of the flask framework.

I have tried running it [self out of thread] and print some "logs", but it just stops in the middle of the night.
I hope there is an option that allows me to run the script forever.
I don't know what to do.

moken
  • 3,227
  • 8
  • 13
  • 23
  • 3
    Not really related to your question but why do crazy global abuse instead of just `insert_data_to_database(*data["Data"])` – mousetail Aug 18 '23 at 09:11
  • I don't know, but it might be to do with how inefficient your code is. instead of seeing there was a better way, you created variables and wrote them out. And a while True loop is repeating many times a second, it probably crashed. It's not neccessary to run it so often and there's probaly a better way – s123 Aug 18 '23 at 09:25

0 Answers0