【发布时间】:2018-06-23 02:50:00
【问题描述】:
我正在使用 python 3.5 和 OSX 10.13.2。
我正在尝试从蓝牙脑电图记录设备收集脑电图数据,而人类正在观看 pygame GUI。因为蓝牙设备以大约 512 Hz 的频率发送数据而 pygame GUI 以大约 25Hz 的频率更新,所以我认为在同一循环/过程中包括蓝牙数据的收集和 GUI 的更新是不合适的。
因此,我想创建两个并发进程:一个用于收集蓝牙输入,另一个用于显示/更新 pygame GUI。我想我已经弄清楚如何在单独的进程中运行 pygame 窗口,但是使用连接到我的蓝牙设备并从我的蓝牙设备读取输入的multiprocessing 模块创建一个单独的进程效果不佳。
当我运行下面的代码时,执行似乎停止在这一行socket.connect(('B0:B4:48:F6:38:A1', 1)):connect() 方法中的任何内容都没有打印。这是 Mac OSX、蓝牙模块、Python 还是其他问题?有谁知道我该如何解决这个问题?如果没有,有没有人有不同的方法可以解决我从蓝牙设备收集数据并使用 python 3.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
【问题讨论】:
标签: macos concurrency bluetooth python-3.5 python-multiprocessing