Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
Python not wait for sub Function
-
Hello Guys,
I have a problem with my function...
i hope anyone can help my out.this is my sample code:
def generatePDF(self, data, customer, customer_project, materiallistType): Querry = [] Querry.append(['Herstellerbeschreibung', 'Herstellernummer', 'Lieferantennummer', 'Anzahl', 'Preis', 'Kommentar']) Querry.extend(data) filePath = self.setFileNamePDF(customer, customer_project, materiallistType) # while filePath is None: # pass print("Bin hier FEHLER ???") print(filePath) sys.exit(1)
my Problem here is that
print(filePath)
is None....
but i did not understand why...when i try something like that in an Test.py it works but not here.... does anyone know why ?
-
-
@DavinE and what is the code of self.setFileNamePDF ?
-
@cvp
this has no effect :( -
@DavinE said:
this has no effect :(
Perhaps something in your self.setFileNamePDF has a callback and you could need to wait it is finished.
-
@cvp
callback ?in the Function is a return like this:
return os.path.join(os.path.dirname(sys.argv[0]), 'Reportlab', materiallistFilesName)
how can i wait till my function is finished that's my problem i don't know how
-
@cvp said:
@DavinE and what is the code of self.setFileNamePDF ?
this is my complete self.setFileNamePDF:
@ui.in_background def setFileNamePDF(self, customer, customer_project, materiallistType): self.createLog(False, 'setFileNamePDF -- Aufruf der Funktion - Dateiname für die *.pdf Datei finden', '', 1) materiallistFilesName = None self.Synology_DS718(customer) try: decontrol = None for directory in self.connection_FTP.nlst(self.mainDirCustomer__CONFIG): if directory.encode('latin-1').decode('utf-8') == self.subDirCustomer__CUSTOMER: decontrol = True break if decontrol: subDirCustomer_Materiallisten__CUSTOMER = '%s/%s' % (self.subDirCustomer_Materiallisten, customer_project) subDirCustomer_Eintragungen = '%s/%s' % (subDirCustomer_Materiallisten__CUSTOMER, self.subDirCustomer_Eintragungen__CONFIG) subDirCustomer_ZwischenRechnung = '%s/%s' % (subDirCustomer_Materiallisten__CUSTOMER, self.subDirCustomer_ZwischenRechnung__CONFIG) subDirCustomer_Abgeschlossen = '%s/%s' % (subDirCustomer_Materiallisten__CUSTOMER, self.subDirCustomer_Abgeschlossen__CONFIG) if materiallistType == self.subDirCustomer_Eintragungen__CONFIG: materiallistType__Path = subDirCustomer_Eintragungen elif materiallistType == self.subDirCustomer_ZwischenRechnung__CONFIG: materiallistType__Path = subDirCustomer_ZwischenRechnung elif materiallistType == self.subDirCustomer_Abgeschlossen__CONFIG: materiallistType__Path = subDirCustomer_Abgeschlossen else: print(f'[ 7000 ] -- Der Materiallisten Typ konnte nicht ermittelt werden: [ {materiallistType} ]:\n{e}') sound.play_effect(play_sound('play_effect', 'mysql', 'error')) self.createLog(False, '[ 7000 ]', '', 2) self.createLog(False, f'Der Materiallisten Typ konnte nicht ermittelt werden: [ {materiallistType} ]', '', 2) console.alert('ftp-error', 'Der Materiallisten Typ konnte nicht ermittelt werden:\n[ {materiallistType} ]', hide_cancel_button=False) if materiallistType == self.subDirCustomer_Abgeschlossen__CONFIG: print("Abfrage drine!!") materiallistFilesName = f'{date.today()} -- {customer_project}.pdf' else: for i, files in enumerate(self.connection_FTP.nlst(materiallistType__Path)): for n in range(1, 51): if os.path.basename(files).encode('latin-1').decode('utf-8') == f'{date.today()}__{n} -- {customer_project}.pdf': materiallistFilesName = f'{date.today()}__{(n + 1)} -- {customer_project}.pdf' if (len(self.connection_FTP.nlst(materiallistType__Path)) - 1) is i: if not materiallistFilesName: materiallistFilesName = f'{date.today()}__1 -- {customer_project}.pdf' break else: materiallistFilesName = f'{date.today()}__1 -- {customer_project}.pdf' except ftplib.all_errors as e: print(f'[ 7001 ] -- Error bei der Funktion [ setFileNamePDF ]:\n{e}') sound.play_effect(play_sound('play_effect', 'mysql', 'error')) self.createLog(False, '[ 7001 ]', '', 2) self.createLog(False, 'Error bei der Funktion [ setFileNamePDF ]', '', 2) self.createLog(False, f'FTP-Server Fehler: {e}', '', 2) console.alert('ftp-error', 'Kundenordner konnten nicht erstellt werden. [ Kunde Erstellen ]\nFehlerausgabe im Terminal', hide_cancel_button=False) finally: self.connection_FTP.quit() print(materiallistFilesName) return os.path.join(os.path.dirname(sys.argv[0]), 'Reportlab', materiallistFilesName)
-
@DavinE is your @ui.in_background needed?
-
@cvp, Honestly ? xD
i have no idea why i set this....
what does @ui.in_background and @on_main_thread exactly
-
@DavinE There are two base threads in Pythonista and you can force to run a process in The main_thread or in tHe ui one.
Remove this line and it is still not ok, put the line @on_main_thread -
@cvp like this:
@on_main_thread def generatePDF(...)
and here:
def setFileNamePDF(self, customer, customer_project, materiallistType)
nothing ?
-
@DavinE Sincerely, I don't know but personally I would put the @on_main_thread before the other def.
-
@cvp okay thanks i try it and response to you xD
-
-
@DavinE eureka
-
Hi everyone,
Is it possible to launch a python command without waiting for a return ? and therefore start the next command without waiting the previous one to finish ?
I searched and asked also on StackOverflow but so far I didn't found what I was looking for...
something that look promising might be the
1
concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
as seen here -> https://stackoverflow.com/a/60832288/11943028But this example is focus on results that I don't need. any ideas ?
Thank you.
-
-
@montykit see the threading module, you could start one thread for each command
But what do you call a command?
-
@montykit try
import threading class MyThread(threading.Thread): def __init__(self,cmd): threading.Thread.__init__(self) self.run = cmd def cmd1(): s = 0 for i in range(1000): s += 1 print(s) def cmd2(): s = 0 for i in range(1000): s += i print(s) MyThread(cmd1).start() MyThread(cmd2).start()