我使用python3.5和OSX10.13.2。
我试图从蓝牙脑电记录设备收集脑电数据,而人类正在看游戏GUI。因为蓝牙设备以大约512 Hz的速度发送数据,而pygame以大约25 Hz的速度更新,所以我认为将蓝牙数据的收集和GUI的更新包含在同一个循环/进程中是不合适的。
因此,我想创建两个并发进程:一个用于收集蓝牙输入,另一个用于显示/更新pygame。我想我已经知道了如何在一个单独的进程中运行游戏窗口,但是使用连接到我的蓝牙设备并读取输入的multiprocessing模块创建一个单独的进程并不是很好。
当我运行下面的代码时,执行似乎停止在这一行socket.connect(('B0:B4:48:F6:38:A1', 1))上:connect()方法中没有任何内容被打印出来。这是Mac、蓝牙模块、Python或其他方面的问题吗?有人知道我怎么解决这个问题吗?如果没有,有没有人可以用不同的方式来处理我最初的问题:从蓝牙设备收集数据,并使用python3.5并行更新GUI?
import multiprocessing, time, bluetooth
def connect():
socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
try:
socket.connect(('B0:B4:48:F6:38:A1', 1))
print("connected to device!!")
except Exception as e:
print("failed to connect :(")
def wait_and_do_nothing():
print("just sleeping over here in this process")
time.sleep(5)
process1 = multiprocessing.Process(target=connect, args=())
process2 = multiprocessing.Process(target=wait_and_do_nothing, args=())
process1.start()
process2.start()
process1.join()
process2.join()
print("finished")上面代码的输出是:finished
发布于 2018-01-16 18:24:29
我解决了我的问题。首先,我应该将多处理代码包装在一个if语句中,如下所示。第二,我应该将start方法设置为“生成”,而不是“叉”,如下所示:
if __name__ == '__main__':
multiprocessing.set_start_method('spawn', force=True)
process1 = multiprocessing.Process(target=connect, args=())
process2 = multiprocessing.Process(target=wait_and_do_nothing, args=())
process1.start()
process2.start()
process1.join()
process2.join()https://stackoverflow.com/questions/48246626
复制相似问题