Ich entwickle ein Projekt, in dem ich etwa 6 Sensoren in einem Beaglebone Black, die speichert diese Daten in 6 verschiedenen Dateien kontinuierlich. Durch eine andere SO-Frage (https://stackoverflow.com/a/36634587/2615940) erfuhr ich, dass das Multiprocessing-Modul dies für mich tun würde, aber wenn ich meinen neuen Code ausführe, erhalte ich nur eine Datei im Gegensatz zu 6. Wie kann ich diesen Code ändern, um die gewünschten 6 Ergebnisdateien zu erhalten ?Gleichzeitiges Schreiben von Dateien mit Python Multiprocessing
* Ich habe meine Datei bearbeitet, um Manager
nach skrrgwasme Vorschlag unten enthalten, aber jetzt läuft der Code, und produziert nichts. Keine Fehler, keine Dateien. Läuft einfach.
Der Code:
import Queue
import multiprocessing
import time
def emgacq(kill_queue, f_name, adcpin):
with open(f_name, '+') as f:
while True:
try:
val = kill_queue.get(block = False)
if val == STOP:
return
except Queue.Empty:
pass
an_val = ADC.read(adcpin) * 1.8
f.write("{}\t{}\n".format(ms, an_val))
def main():
#Timing stuff
start = time.time()
elapsed_seconds = time.time() - start
ms = elapsed_seconds * 1000
#Multiprcessing settings
pool = multiprocessing.Pool()
m = multiprocessing.Manager()
kill_queue = m.Queue()
#All the arguments we need run thru emgacq()
arg_list = [
(kill_queue, 'HamLeft', 'AIN1'),
(kill_queue, 'HamRight', 'AIN2'),
(kill_queue, 'QuadLeft', 'AIN3'),
(kill_queue, 'QuadRight', 'AIN4'),
(kill_queue, 'GastLeft', 'AIN5'),
(kill_queue, 'GastRight', 'AIN6'),
]
for a in arg_list:
pool.apply_async(emgacq, args=a)
try:
while True:
time.sleep(60)
except KeyboardInterrupt:
for a in arg_list:
kill_queue.put(STOP)
pool.close()
pool.join()
raise f.close()
if __name__ == "__main__":
main()
die Probleme Gegeben Sie mit beiden zu tun habe für diese Fragen, empfehle ich Ihnen einige Tutorials grundlegende Python zu gehen. Es scheint, als ob Sie etwas über grundlegende Ideen wie Funktionsaufrufe, Variablenzuweisungen und Argumentübergabe verwirrt sind. Sie werden viel mehr Erfolg haben, wenn Sie diese Grundlagen verstehen, bevor Sie in Ihr nächstes Skript/Programm eintauchen. – skrrgwasme