python写并发,使用python多处理的并发文件写入

我正在开发一个项目,在这个项目中,我使用大约6个传感器输入Beaglebone Black,将这些数据连续保存到6个不同的文件中。通过另一个SO问题(https://stackoverflow.com/a/36634587/2615940),我了解到多处理模块可以为我完成这项工作,但是在运行新代码时,我只获得1个文件,而不是6个文件。如何修改此代码以获得所需的6个结果文件?在

*根据下面skrrgwasme的建议,我已经编辑了我的文件以包含Manager,但是现在代码运行,并且什么也不产生。没有错误,没有文件。只是跑步。在

代码: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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值