首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将蓝牙模块与多处理模块结合使用?

如何将蓝牙模块与多处理模块结合使用?
EN

Stack Overflow用户
提问于 2018-01-14 04:13:56
回答 1查看 276关注 0票数 0

我使用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?

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-16 18:24:29

我解决了我的问题。首先,我应该将多处理代码包装在一个if语句中,如下所示。第二,我应该将start方法设置为“生成”,而不是“叉”,如下所示:

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48246626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档