Birden fazla sensörden okumak için bir Beaglebone kullanarak bir proje üzerinde çalışıyorum ve daha sonra bu verileri bir metin dosyasına geçiriyorum.İki farklı kasları izliyorum, bu yüzden her bir dosyaya karşılık gelen dosyalarım var .Birden çok dosya için eşzamanlı yazma
Şu anda Beaglebone Black'in ADC pinlerine beslenen 6 sensör bulunuyor ve kodum Beaglebone'a her pin için 1 ayrı dosya oluşturmasını bildiriyor. Aşağıdaki kodu çalıştırdığımda, sadece bir dosyayı (ilk işlev çalışır) alırım. Önceden "while True:" ifadelerini dahil etmemiştim, bu da 1-2 okuma ve altı dosya oluşturdu. Sensörlerin verilerini sürekli olarak kaydetmek için "while True:" ifadesini ekledim çünkü her dosyada 2'den fazla puan olmamasından sorumlu olduğumu düşündüm.
Sorum şu: Birden fazla dosyaya aynı anda yazmak mümkün mü? Ben alternatif aynı dosyaya tüm bu verileri yazabilirsiniz, ama bundan amaçlandığı şekilde bu kod çalışmaz hale getirir olup bittiğini bilmenin ilgileniyorum (6 dosyalar.)
#File save for left hamstring
def LeftHamAcquisition():
HamLData = open('HamLeft' + '.txt', 'a+')
file_name = os.path.join(/relevant file path/)
while True:
EMGhamL = ADC.read_raw('AIN1')
HamLData.write(str(elapsed_milliseconds))
HamLData.write('\t')
HamLData.write(str(EMGhamL))
HamLData.write('\n')
#File save for right hams
def RighHamAcquisition():
HamRData = open('HamRight' + '.txt', 'a+')
file_name2 = os.path.join(/relevant file path/)
while True:
EMGhamR = ADC.read_raw('AIN2')
HamRData.write(str(elapsed_milliseconds))
HamRData.write('\t')
HamRData.write(str(EMGhamR))
HamRData.write('\n')
#file save for left quad
def LeftQuadAcquisition():
QuadLData = open('QuadLeft' + '.txt', 'a+')
file_name3 = os.path.join(/relevant file path/)
while True:
EMGquadL = ADC.read_raw('AIN3')
QuadLData.write(str(elapsed_milliseconds))
QuadLData.write('\t')
QuadLData.write(str(EMGquadL))
QuadLData.write('\n')
#file save for right quad
def RightQuadAcquisition():
QuadRData = open('QuadRight' + '.txt', 'a+')
file_name4 = os.path.join(/relevant file path/)
while True:
EMGquadR = ADC.read_raw('AIN4')
QuadRData.write(str(elapsed_milliseconds))
QuadRData.write('\t')
QuadRData.write(str(EMGquadR))
QuadRData.write('\n')
#file save for left vast
def LeftVastAcquisition():
VastLData = open('VastLeft' + '.txt', 'a+')
file_name5 = os.path.join(/relevant file path/)
while True:
EMGVastL = ADC.read_raw('AIN5')
VastLData.write(str(elapsed_milliseconds))
VastLData.write('\t')
VastLData.write(str(EMGVastL))
VastLData.write('\n')
#file save for right vast
def RightVastAcquisition():
VastRData = open('VastRight' + '.txt', 'a+')
file_name6 = os.path.join(/relevant file path/)
while True:
EMGVastR = ADC.read_raw('AIN6')
VastRData.write(str(elapsed_milliseconds))
VastRData.write('\t')
VastRData.write(str(EMGVastR))
VastRData.write('\n')
#The Program
print "Press ctrl-C to end acquisition"
LeftHamAcquisition()
RighHamAcquisition()
LeftVastAcquisition()
RightVastAcquisition()
LeftQuadAcquisition()
RightQuadAcquisition()
try:
pass
except KeyboardInterrupt:
raise data.close()
Hepsinin işe yarayacağını düşündünüz? 'LeftHamAcquisition' sonsuz bir döngüye sahiptir, bu yüzden işlev asla geri dönmez. Çok işlemcili kütüphane gibi bir şeyi paralel olarak çalışacak şekilde gen kullanmanız gerekir. – skrrgwasme
Diğer adam işaret ettiği gibi, her bir fonksiyon sonsuz bir döngü içerdiğinden, hiçbiri hiçbir zaman geri dönmeyecek, bu yüzden programınız ilk aranan her şeye yapışacaktır. Genelde pahalı bir işlem olduğu için, belleğe sürekli yazma genellikle en iyi seçenek değildir. Neden fonksiyonların her biri verileri arabelleğe göndermez, sonra ayrı bir iş parçacığına sahip olur. Her sensörü sırayla kontrol etmedikçe, yazıyı yapmak için neredeyse kesinlikle ayrı bir ipliğe ihtiyacınız olacaktır. – Carcigenicate